PDA

Показать полную графическую версию : [решено] Определение версии (сборки) и сервис пака ОС


Страниц : 1 2 3 [4]

gora
08-02-2013, 15:26
как в этот батник добавить start /wait »
Дописать в обе строки (хотя я не вижу в этом смысла):
...
Start /wait "" "E:\BSPOST\Install\LibreOffice.exe"
...
Start /wait "" "c:\Program Files (x86)\Microsoft Office\Options14\MSOO.exe"
Наличие первых пустых кавычек в строке обязательно!автоопределение папки программ файлс »
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%


автоопределение буквы флешки »
Если с этой флешки запущен сам батник, то можно так:Set FlDrv=%~d0

Fortress1
08-02-2013, 16:25
@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
09-02-2013, 09:35
Fortress1,
Кстати, ты батник запускаешь прямо непосредственно сам, или из какой-то программы оболочки? Просто если из программы оболочки, то она очевидно 32-битная и запущеный дочерний батник будет тоже считаться 32-битным и переменная %ProgramFiles% ему будет возвращаться как %ProgramFiles(x86)% даже если он запущен на 64-битной системе. Там надо в проге перед вызовом батника отключать перенаправление потоков для 32 битных программ, чтобы переменные отдавались как есть.

Fortress1
09-02-2013, 10:00
батник запускаю руками...из проги еще не пробовал

gora
11-02-2013, 09:09
@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
11-02-2013, 18:54
А как задать обратное условие, т.е. если Ось 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
11-02-2013, 19:14
@Echo Off
Ver | Find "6." >nul && Set newver=1
If Defined newver (
Echo New version
) Else Echo Old version
Pause>nul

Fortress1
11-02-2013, 20:59
Уважаемый Gora

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

http://i54.fastpic.ru/big/2013/0211/5c/1e6815f8ac5ed5666ea5ee4ad843a65c.png

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

gora
11-02-2013, 21:40
Fortress1, исправил.

Lexod
27-01-2018, 22:53
Здравствуйте, Уважаемые Гуру!

Тема очень старая, но может моя информация окажется полезной. В 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




© OSzone.net 2001-2012