[решено] Определение версии (сборки) и сервис пака ОС
Может кто-нибудь поделится скриптом который возвращает версию ОС и ее сервис пак в консоли , с последующим запуском файла в консоли или подсказать соответствие версии сборок ОС (Nt,2k,2k server,xp, 2k3, vista) сервис пакам для нижеприведенного скрипта.
Цитата:
|
ultra_fs
Пример: Код:
@Echo Off |
Остановился на ниже приведенном коде скрипта, который определяет версию ОС, но универсальности не получилось, потому как в NT 4.0 отсутствует параметр в реестре "ProductName", а на в Viste вообще непонятное происходит
Цитата:
|
Цитата:
FYI: http://en.wikipedia.org/wiki/Microsoft_Windows Цитата:
|
Цитата:
Цитата:
|
Цитата:
Код:
@Echo Off |
amel27, спасибо большое, все заработало, а можно для понимания пояснить вот эту вот конструкцию
Цитата:
|
ultra_fs, в разных осях REG.EXE выдает разное количество строк заголовка, вместо корректировки Skip можно отфильтровать выходной поток и оставить только одну нужную нам строку (содержащую текст "REG_SZ"), это и делает REG|FIND "REG_SZ"
|
заметил очень странный глюк с параметром CSDVersion . Если запускаю батник который пытается получить его значение в висте 64 из тотал командера то поучаю вот это в ответ "Ошибка: Не удается найти указанный раздел или параметр в реестре." А если запускаю тот же батник их проводника то все ок.
Хотелось бы как-то решить эту проблему. |
mitiya, отключить в батнике "@Echo Off" и выполнить в таком виде:
Код:
Batnik.CMD >Batnik.LOG 2>&1 |
вот запущенный из тотала
Код:
Код:
Код:
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CSDVersion |
на пробу еще два варианта:
Код:
Reg Query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CSDVersion |
второго ключа нет , смотрел через regedit.
Первый то есть , но с ним все так же как и раньше. При чем что интересно, если запускаю проводник из тотала (правой кнопка -> проводник) то все равно не находит, а если через пуск к примеру то находит. я так понимаю Wow6432Node это ветка которую видят 32битные приложения ? |
Цитата:
Код:
@Echo Off |
в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion нет ключа CSDVersion
|
mitiya, как уже сказал, под рукой только Win2003 x64 - там есть, насчет Висты ничего не скажу :dont-know
|
судя по всему смысл этого глюка в том, что при запуске из тотала cmd как бы наследует "32х битность"
как бы сделать так чтобы она ее не наследовала ? |
Проблема:
Код:
set disk=D:\NETBOOT |
Devils0411, неправильно задается/читается переменная version, примерный шаблон:
Код:
Echo Off |
amel27, Странно... Когда делал вот такой тестовый вариант, то на семерке правильно срабатывал скрипт:
Код:
set disk=D:\test |
Цитата:
Код:
Win2003: "Microsoft Windows [Version 5.2.3790]" (3-я) 3. При подстановке значения, имя переменной нужно брать в знаки '%'. Цитата:
|
Спасибо, теперь стало яснее ;)
|
а как будет выглядеть параметр csdversion в случае отсутствия sp в системе (ну и условие скрипта для проверки соответственно)?
|
Проверка версии операционной системы
Не знаю, задавался ли подобный вопрос, но я не нашел...или просто не уверен какие ключевые слова задать для поиска..
Интересует как с помощью батника или другим образом проверить версию системы, т.е. что взять в качестве проверяемого файла или параметра реестра.. Нужно для таких целей: есть программа которая работает на XP, но не работает на 7, или наоборот..так вот батник должен проверить какая система.. и только в том случае установить прогу, если подходит система... |
Цитата:
|
cleric1985_n,
Для XP: Код:
@echo off |
Цитата:
Цитата:
Могу я использовать эти данные в качестве маркерных? |
Цитата:
98: "98" Me: "Me" 2000: "5.0" XP: "5.1" 2003 или xp64: "5.2" Vista: "6.0" 7: "6.1" или "7.0" |
El Sanchez
:unsure: извиняюсь если глупость спросил, но все-же: к примеру у меня в папке есть два файла один только для хр другой для 7, программа выполняется из runonceex какую команду мне использовать если я ставлю на хр, чтобы запускалась программа для хр, а если я буду устанавливать на 7 то запускался файл для 7, а программа для хр игнорировалась просто сдесь мне не совсем понятно: Код:
@echo off |
Цитата:
WMI Tasks: Operating Systems (Windows) ...determine which version of the Windows operating system is installed on a computer? |
7ka,
Код:
@echo off &&, || - операторы группирования команд. Команда№1&&Команда№2 - команда№2 исполняется, если исполняется команда№1 Команда№1||Команда№2 - команда№2 исполняется, если не исполняется команда№1 Объединим: Команда№1&&Команда№2||Команда№3 - команда№2 исполняется, если исполняется команда№1, а команда№3 исполняется, если не исполняется команда№2, отсюда вывод: Если исполнится команда№1 (ver|find "5.1"), то исполнится команда№2 (start "" "Path to installers\installprogXP.exe"), иначе исполнится команда№3 (start "" "Path to installers\installprogWin7.exe") |
Цитата:
Код:
ver|find "5.1"&&start "" "%SYSTEMDRIVE%\APPWINXP.MSI /qn /NORESTART"||start "" "%SYSTEMDRIVE%\APPWIN7.EXE /S" |
Цитата:
Код:
ver|find "5.1"&&start "" "%SYSTEMDRIVE%\APPWINXP.MSI" /qn /NORESTART||start "" "%SYSTEMDRIVE%\APPWIN7.EXE" /S |
Цитата:
|
Покопался на форуме и исходя из решений пользователей вывел код позволяющий не только определить тип системы, но и ее разрядность:
Код:
Echo Off |
Escalion,
XP 64 вроде имеет код 5.2, как и 2003-я. |
seriych, Нет. У ХР 5.1, это я проверил (думаю врятли у разных ХР коды могут отличаться). Однако я не проверял коды на 2003 и Висте... возможно и ошибся. Но эти коды я взял из сообщений пользователей этого форума, которые решали подобные задачи на 2003 и Висте.
|
вот еще один рабочий код
Код:
set OS_TYPE=32 |
Ageron, Escalion, а почему бы не воспользоваться командой %Processor_Architecture%?
|
sLiDeR-X,
на 64 разрядном процессоре может стоять 32 разрядная ос |
Ageron, причем здесь процессор.
Насколько я понял, этот параметр показывает версию системы, а не процессора. http://forum.oszone.net/thread-150321.html |
Точнее тип системы
и про какие 64-бит процессоры идет речь? На Итаниумы 32-бит винду на поставишь (%PROCESSOR_ARCHITECTURE%=IA64) во всех остальных случаях зависит от разрядности ОС ultra_fs, в русской 7ке ver возвращает Microsoft Windows [Version 6.1.7601] |
Определение языка
тк не на всех русских через VER получается определить В висте и 2008 не проверял - нет под рукой for /f "tokens=4" %%a in ('chcp') do set CP=%%a chcp 1251 >nul 2>nul ver | find "Version">nul && set lng=eng ::Это например для Русской 7ки Professional которая стоит у меня на ноуте - ленгвич паков никаких нет - честно купленная в 2011 коробочная версия set /? | find "переменных среды">nul && set lng=rus ::Это в русском XP и 2003. ver | find "Версия">nul && set lng=rus chcp %CP% >nul 2>nul переключение кодовой страницы - что бы командная find воспринял кодировку 1251 запоминание - что бы по выходу вернуть ее взад |
По выше приведённым примерам собрал скрипт. Скрипт проверил(рабочий) на Win XP home и Win 7. К сожалению не могу проверить на других осях.
Обращаюсь к специалистам с просьбой проверить скрипт на грамотность написания, и по возможности внести поправки (необходимо, чтобы скрипт работал на всей NT-линейке включая x64): Код:
@echo off Рассматривал вариант получения версии из реестра: Код:
For /F "Tokens=3" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentVersion^|Find "REG_SZ"') Do Set Version=%%A Код:
For /F "Tokens=2 Delims=[]" %%i In ('ver') Do ( |
Цитата:
|
Прошу прощения за неточность, начиная с NT 5.0(Win2k).
|
:: одной строкой - проверка на вин7 русскую х64
ver | find "6.1" >nul && set /? | find "переменных" >nul && if "%ProgramW6432%" Neq "" start /wait vcredist_x64_2012.exe /passive /norestart |
Цитата:
|
у меня есть две винды - 7 и 8. Помогите плиз создать батник который будет определять 7 это или 8, после определения запускать ЕСЛИ 7ка ----> MS Office Starter, ЕСЛИ 8ка - Libre Office.
Заранее спасибо Если возможно чтобы этот батник мог это же самое делать, только в зависимости от разрядности системы |
Если вин7х64 то установить Стартер, если х32 то Либру
ver | find "6.1" >nul && if "%ProgramW6432%" Neq "" (start /wait /d "office\Office2010Starter_RU\" SetupConsumerC2R.exe) else (start /wait /d "office\libre\" msiexec /qb! /i LibO_3.6.5_Win_x86_install_multi.msi ALLUSERS=1 CREATEDESKTOPLINK=1 REGISTER_ALL_MSO_TYPES=1 ISCHECKFORPRODUCTUPDATE=0 %LANG%) Если вин8х64 то установить Либру, если х32 то Стартер ver | find "6.2" >nul && if "%ProgramW6432%" Neq "" (start /wait /d "office\libre\" msiexec /qb! /i LibO_3.6.5_Win_x86_install_multi.msi ALLUSERS=1 CREATEDESKTOPLINK=1 REGISTER_ALL_MSO_TYPES=1 ISCHECKFORPRODUCTUPDATE=0 %LANG%) else (start /wait /d "office\Office2010Starter_RU\" SetupConsumerC2R.exe) |
Цитата:
Если вин7х64(x86) то установить Стартер, если вин8х64(x86) то Либру И возможно ли будет вместо оригинального Либре вставить обрезанную версию(репак) со своими ключами? |
Подскажите, как объединить в блок:
Код:
If "%version%"=="5.0" GoTo End |
Код:
for %%i in (5.0 5.1 5.2) do if %%i equ %version% … |
Цитата:
|
@echo
color 0A echo. set CurrentOS=notOS ver|find "6.0">nul&&set CurrentOS=Windows7 ver|find "6.1">nul&&set CurrentOS=Windows7 ver|find "6.2">nul&&set CurrentOS=Windows8 if %CurrentOS%==notOS ( echo _________________________ echo. echo !ERROR! OS not supported. echo _________________________ echo. pause exit ) if %CurrentOS%==Windows7( start /wait "c:\Program Files (x86)\Microsoft Office\Options14\MSOO.exe" ) if %CurrentOS%==Windows8( start /wait d:\BSPOST\Install\LibreOffice.exe ) Подскажите ребят пожалуйста в чем тут моя ошибка....Я выше уже писал...установить на 7ку офис из ПФ, а на 8ку либру. Заранее спасибо |
Код:
if %CurrentOS%==Windows7 ( |
Цитата:
|
Решил проблему вот этим
@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 if "%SYSTEMID%" == "Windows 8" ( echo Windows 8 echo Installing Libre Office "E:\BSPOST\Install\LibreOffice.exe" echo Done exit ) echo Windows 7 echo Installing MS Office 2010 "c:\Program Files (x86)\Microsoft Office\Options14\MSOO.exe" echo Done exit |
Цитата:
2 Проверьте в процессах, появляется ли там процесс LibreOffice.exe |
Gora гуру
Подскажи пожалуйста как в этот батник добавить start /wait и добавить автоопределение буквы флешки и автоопределение папки программ файлс (т.к. в 32 разрядных системах нет папки х86) |
Цитата:
Код:
... Цитата:
Код:
Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86 Цитата:
Код:
Set FlDrv=%~d0 |
@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 любой редакции работает без проблем (к счастью ноутов сотня так что тестим мгновенно) |
Fortress1,
Кстати, ты батник запускаешь прямо непосредственно сам, или из какой-то программы оболочки? Просто если из программы оболочки, то она очевидно 32-битная и запущеный дочерний батник будет тоже считаться 32-битным и переменная %ProgramFiles% ему будет возвращаться как %ProgramFiles(x86)% даже если он запущен на 64-битной системе. Там надо в проге перед вызовом батника отключать перенаправление потоков для 32 битных программ, чтобы переменные отдавались как есть. |
батник запускаю руками...из проги еще не пробовал
|
Код:
@echo off |
А как задать обратное условие, т.е. если Ось 6.0 6.1 6.2 - код дальше, если нет то GoTo.
Код:
For /F "Tokens=2 Delims=[]" %%i In ('ver') Do ( |
Код:
@Echo Off |
Уважаемый Gora
вот скрин этого скрипта, ответ на который выдал системник с х86 ОС Пробовал как из под BSPOST, так и запущенный руками батник....Итог один - х86 система определяет неправильно |
Fortress1, исправил.
|
Здравствуйте, Уважаемые Гуру!
Тема очень старая, но может моя информация окажется полезной. В Windows 7 удалось получить часть информации через WMIC. Часть информации через обращение к реестру недоступна, например, при вызове *.bat - файла из-под Total Commander (например, поле CSDVersion раздела HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion). Работает такая схема (на примере получения названия ОС): Код:
SET WMICPS=OS Среди прочего по такой схеме: WMICPARAM=OSArchitecture - архитектура ОС WMICPARAM=CSDVersion - версия сервис-пака ("" - без сервис-пака). WMIC также можно использовать для быстрого определения наличия нужного обновления. У меня сработало с использованием временного файла по схеме: Код:
SET KBLOG=C:\KB.log |
Время: 07:21. |
Время: 07:21.
© OSzone.net 2001-