CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Ответить
 • Просмотры: 2
Аватара пользователя
gora

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение gora »

Цитата Fortress1:



как в этот батник добавить start /wait
CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС




Дописать в обе строки (хотя я не вижу в этом смысла):

Код:

Код: Выделить всё

...
Start /wait "" "E:\BSPOST\Install\LibreOffice.exe"
...
Start /wait "" "c:\Program Files (x86)\Microsoft Office\Options14\MSOO.exe"

Наличие первых пустых кавычек в строке обязательно!
Цитата Fortress1:



автоопределение папки программ файлс
CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС






Код:

Код: Выделить всё

Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
Set PF=%ProgramFiles%
If %xOS%==x64 Set PF=%ProgramFiles(x86)%
Echo %xOS% %PF%


Цитата Fortress1:



автоопределение буквы флешки
CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС




Если с этой флешки запущен сам батник, то можно так:

Код:

Код: Выделить всё

Set FlDrv=%~d0
Аватара пользователя
Fortress1

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение Fortress1 »

@echo off

set SYSTEMID=Windows 7



reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find "Windows 8" >nul

if "%ERRORLEVEL%" == "0" set SYSTEMID=Windows 8



Set FlDrv=%~d0

Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86

Set PF=%ProgramFiles%

If xOS==x64 Set PF=%ProgramFiles(x86)%

Echo %xOS% %PF%



if "%SYSTEMID%" == "Windows 8" (



echo Windows 8

echo Installing Libre Office

Start /wait "" "%~d0\BSPOST\Install\LibreOffice.exe"

echo Done

exit

)



echo Windows 7

echo Installing MS Office 2010

Start /wait "" "%PF%\Microsoft Office\Options14\MSOO.exe"

echo Done

exit







На 8ке любой редакции работает без проблем

На 7ке х64 все равно выдает ошибку в пути к ПФ (ставит обычную ПФ а не х86) (на ноуте с 8кой определил папку ПФх86 правильно)

На 7ке х86 любой редакции работает без проблем

(к счастью ноутов сотня так что тестим мгновенно)
Аватара пользователя
seriych

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение seriych »

Fortress1,

Кстати, ты батник запускаешь прямо непосредственно сам, или из какой-то программы оболочки? Просто если из программы оболочки, то она очевидно 32-битная и запущеный дочерний батник будет тоже считаться 32-битным и переменная %ProgramFiles% ему будет возвращаться как %ProgramFiles(x86)% даже если он запущен на 64-битной системе. Там надо в проге перед вызовом батника отключать перенаправление потоков для 32 битных программ, чтобы переменные отдавались как есть.
Аватара пользователя
Fortress1

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение Fortress1 »

батник запускаю руками...из проги еще не пробовал
Аватара пользователя
gora

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение gora »

Код:

Код: Выделить всё

@echo off
set SYSTEMID=Windows 7
reg QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find "Windows 8" >nul
if "%ERRORLEVEL%"=="0" set SYSTEMID=Windows 8
Set FlDrv=%~d0
Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86
Set PF=%ProgramFiles(x86)%
If %xOS%==x86 Set PF=%ProgramFiles%
Echo %%xOS%% -		%xOS%
Echo %%PF%% -		%PF%
Echo %%SYSTEMID%% -	%SYSTEMID%
Echo %%FlDrv%% -	%FlDrv%
Echo ====================================================
if "%SYSTEMID%"=="Windows 8" (
	echo Windows 8
	echo Installing Libre Office
	Start /wait "" "%~d0\BSPOST\Install\LibreOffice.exe"
) Else (
	echo Windows 7
	echo Installing MS Office 2010
	Start /wait "" "%PF%\Microsoft Office\Options14\MSOO.exe"
)
echo Done
Pause
exit
Аватара пользователя
Lucretius

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение Lucretius »

А как задать обратное условие, т.е. если Ось 6.0 6.1 6.2 - код дальше, если нет то GoTo.



Код:

Код: Выделить всё

For /F "Tokens=2 Delims=[]" %%i In ('ver') Do (
 For /F "Tokens=2,3 Delims=. " %%a In ("%%i") Do Set version=%%a.%%b
)
for %%i in ( 6.0 6.1 6.2 ) do if %%i equ %version%  GoTo Task
Аватара пользователя
gora

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение gora »

Код:

Код: Выделить всё

@Echo Off
Ver | Find "6." >nul && Set newver=1
If Defined newver (
	Echo New version
) Else Echo Old version
Pause>nul
Аватара пользователя
Fortress1

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение Fortress1 »

Уважаемый Gora



вот скрин этого скрипта, ответ на который выдал системник с х86 ОС



Изображение



Пробовал как из под BSPOST, так и запущенный руками батник....Итог один - х86 система определяет неправильно
Аватара пользователя
Lexod

Re: CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Сообщение Lexod »

Здравствуйте, Уважаемые Гуру!



Тема очень старая, но может моя информация окажется полезной. В Windows 7 удалось получить часть информации через WMIC. Часть информации через обращение к реестру недоступна, например, при вызове *.bat - файла из-под Total Commander (например, поле CSDVersion раздела HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion). Работает такая схема (на примере получения названия ОС):





Код:

Код: Выделить всё

SET WMICPS=OS
SET WMICPARAM=Caption
FOR /F "delims=" %%a in ('WMIC %WMICPS% GET /FORMAT:LIST ^| FIND /i "%WMICPARAM%"') do ( FOR /F "tokens=1 delims==" %%b in ("%%a") do (IF "%%b"=="%WMICPARAM%" FOR /F "tokens=2 delims==" %%c in ("%%a") do (SET PARAMVOL=%%c)))

где WMICPS - раздел WMIC, WMICPARAM - имя параметра, PARAMVOL - получаемое значение параметра. Второй цикл проверяет полное ли соответствие заданного имени параметра найденной строке, например, для полей Name. Правда, поле Name раздела OS содержит дополнительную строку со спецсимволами, поэтому название ОС пришлось брать по Caption.

Среди прочего по такой схеме:

WMICPARAM=OSArchitecture - архитектура ОС

WMICPARAM=CSDVersion - версия сервис-пака ("" - без сервис-пака).



WMIC также можно использовать для быстрого определения наличия нужного обновления. У меня сработало с использованием временного файла по схеме:





Код:

Код: Выделить всё

SET KBLOG=C:\KB.log
WMIC QFE LIST >> %KBLOG%
1>NUL FINDSTR "KB2598845" %KBLOG% || GOTO :Code_If_Installed
Ответить

Вернуться в «Скриптовые языки администрирования Windows»