Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

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

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Может кто-нибудь поделится скриптом который возвращает версию ОС и ее сервис пак в консоли , с последующим запуском файла в консоли или подсказать соответствие версии сборок ОС (Nt,2k,2k server,xp, 2k3, vista) сервис пакам для нижеприведенного скрипта.

Цитата:
for /F "tokens=4" %%V in ('ver') do if %%V==[Версия goto

Отправлено: 02:10, 27-05-2009

 

Аватара для Maza Faka

Ветеран


Сообщения: 604
Благодарности: 133

Профиль | Отправить PM | Цитировать


ultra_fs
Пример:
Код: Выделить весь код
@Echo Off

For /F "Skip=4 Tokens=3" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CurrentVersion') Do Set OSver=%%A

For /F "Skip=4 Tokens=3" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CurrentBuildNumber') Do Set OSver=%OSver%.%%A


For /F "Skip=4 Tokens=3,*" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CSDVersion') Do Set SPver=%%A %%B

Echo %OSver%
Echo %SPver%

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:20, 27-05-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Остановился на ниже приведенном коде скрипта, который определяет версию ОС, но универсальности не получилось, потому как в NT 4.0 отсутствует параметр в реестре "ProductName", а на в Viste вообще непонятное происходит

Цитата:
For /F "tokens=4" %%V in ('ver') do if %%V==4.0 goto ntdetect
rem пришлось определять версию nt 4 через ver ввиду отсутствия в реестре параметра "ProductName"

For /F "Skip=4 Tokens=3,*" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V ProductName') Do Set OS1=%%A %%B
rem объявляем переменную os1 и присваиваем ей значение параметра "ProductName"

For /F "Tokens=1-3,*" %%C In ('Echo %OS1%') do if %%C==Microsoft if %%D==Windows if %%E==2000 start 2k.cmd
rem выполняем анализ переменной, если ее значение Microsoft Windows 2000 - запускаем 2k.cmd
For /F "Tokens=1-3,*" %%C In ('Echo %OS1%') do if %%C==Microsoft if %%D==Windows if %%E==XP start xp.cmd
rem выполняем анализ переменной, если ее значение Microsoft Windows XP - запускаем xp.cmd
For /F "Tokens=1-4,*" %%C In ('Echo %OS1%') do if %%C==Microsoft if %%D==Windows if %%E==Server if %%F==2003 start 2k3.cmd
rem выполняем анализ переменной, если ее значение Microsoft Windows Server 2003 - запускаем 2k3.cmd

For /F "Tokens=1-2,*" %%C In ('Echo %OS1%') do if %%C==Windows if %%D==Vista start vista.cmd
rem выполняем анализ переменной, если ее значение Windows Vista - должен запускаться vista.cmd
rem но на практике в висте скрипт не выполняется - появляется сообщение о выключенном echo
rem и неожиданном появлении Home
От скрипта требуется что бы при запуске в любой ос - он безошибочно определял ее и запускал соответствующий ей файл, а также хотелось чтобы он был максимально универсален. Есть какие-нибудь идеи насчет nt и висты ?

Отправлено: 01:29, 29-05-2009 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата ultra_fs:
в NT 4.0 отсутствует параметр в реестре "ProductName" »
зато присутствуют CurrentVersion, CurrentBuildNumber и CSDVersion - более чем достаточно
FYI: http://en.wikipedia.org/wiki/Microsoft_Windows

Цитата ultra_fs:
на в Viste вообще непонятное происходит »
FYI: http://capitalhead.com/articles/how-...installed.aspx
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:27, 30-05-2009 | #4


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


это-то понятно , визуально ключи и параметры соответсвуют, тем же ключам xp или 2k3, но при том же запросе в viste
Цитата ultra_fs:
For /F "Tokens=1-2,*" %%C In ('Echo %OS1%') do if %%C==Windows if %%D==Vista start vista.cmd »
на выходе получается фигня какая-то

Отправлено: 23:55, 31-05-2009 | #5


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата ultra_fs:
на выходе получается фигня какая-то »
проблема не в этой строке, а в реализации "Reg Query", попробуйте так:
Код: Выделить весь код
@Echo Off

For /F "Tokens=2* Delims=	 " %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V ProductName^|Find "REG_SZ"') Do Set OS1=%%B
@Echo %OS1%
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:36, 01-06-2009 | #6


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


amel27, спасибо большое, все заработало, а можно для понимания пояснить вот эту вот конструкцию
Цитата:
ProductName^|Find "REG_SZ
это поиск в ?

Отправлено: 19:57, 01-06-2009 | #7


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


ultra_fs, в разных осях REG.EXE выдает разное количество строк заголовка, вместо корректировки Skip можно отфильтровать выходной поток и оставить только одну нужную нам строку (содержащую текст "REG_SZ"), это и делает REG|FIND "REG_SZ"
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:29, 02-06-2009 | #8


Старожил


Сообщения: 440
Благодарности: 12

Профиль | Отправить PM | Цитировать


заметил очень странный глюк с параметром CSDVersion . Если запускаю батник который пытается получить его значение в висте 64 из тотал командера то поучаю вот это в ответ "Ошибка: Не удается найти указанный раздел или параметр в реестре." А если запускаю тот же батник их проводника то все ок.

Хотелось бы как-то решить эту проблему.

Отправлено: 22:57, 21-06-2009 | #9


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


mitiya, отключить в батнике "@Echo Off" и выполнить в таком виде:
Код: Выделить весь код
Batnik.CMD >Batnik.LOG 2>&1
лог в студию

Отправлено: 04:37, 22-06-2009 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Определение версии (сборки) и сервис пака ОС

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Управление FireWall через GPO на Windows без сервис пака. exo Microsoft Windows NT/2000/2003 3 28-09-2009 12:52
Разное - [решено] Изменение метки установленного сервис пака Midge Microsoft Windows 2000/XP 1 24-05-2009 23:02
Microsoft официально запускает XP SP3. Чего следует ожидать от нового сервис пака? OSZone News Новости и события Microsoft 8 23-04-2008 08:09
Определение версии сервис пака по файлам дистрибутива Sparkster Microsoft Windows 2000/XP 3 07-05-2007 22:26
Как изменить версию сервис пака tualatin Microsoft Windows NT/2000/2003 12 10-06-2005 17:03




 
Переход