Так же, как и в предыдущем примере, для определения версии операционной системы в процессе выполнения командного файла, можно воспользоваться поиском определенных фрагментов текста в результатах выполнения команд, отображающих сведения о системе. Например, во всех операционных системах семейства Windows(и даже в DOS) существует специальная команда VER, предназначенная для отображения сведений о версии ОС. В результате выполнения команды, например, в среде Windows XP, отображается текст:
MicrosoftWindows XP [Версия 5.1.2600]
В среде Windows 7, текст отличается:
MicrosoftWindows [Version 6.1.7600]
В среде Windows 10:
MicrosoftWindows [Version 10.0.14393]
Таким образом, результат выполнения команды VER в среде разных версий Windows, всегда содержит определенный текст, характерный только для данной ОС, и задача определения версии решается довольно просто:
@echo off
setcurr_OS=
REM
ver | find /i "5.0"
if %errorlevel% == 0 set curr_OS=Windows 2000
REM
ver | find /i "5.1"
if %errorlevel% == 0 set curr_OS=Windows XP
REM
ver | find /i "5.2.3"
if %errorlevel% == 0 set curr_OS=Windows Server 2003
REM
ver|find /i "6.0"
if %errorlevel% == 0 set curr_OS=Windows Vista
REM
ver | find /i "6.1">nul
if %errorlevel% == 0 set curr_OS=Windows 7
REM
if "%curr_OS%"=="" set curr_OS=Unknown
echo Текущая версия ОС - %curr_OS%
Можно также воспользоваться более информативным выводом команды NET CONFIG WORKSTATION. При выполнении в среде Windows XP вывод команды представляет собой следующий текст:
Имя компьютера \\COMP1
Полное имя компьютера COMP1.Mydomain
Имя пользователя USER2
Активная рабочая станция на
NetbiosSmb (000000000000)
NetBT_Tcpip_{F53DEAF8-0AF5-4875-B565-8ED55C594769} (000D87009D28)
Версия программы Windows 2002
Домен рабочей станции Mydomain
DNS-имя домена рабочей станции Mydomain
Домен входа Mydomain
Интервал ожидания открытия COM-порта (с) 0
Отсчет передачи COM-порта (байт) 16
Таймаут передачи COM-порта (мс) 250
Команда выполнена успешно.
Для среды Windows 7 результат выполнения команды выглядит так:
Имя компьютера \\COMP1
Полное имя компьютера COMP1.Mydomain
Имя пользователя user2
Активная рабочая станция на
NetBT_Tcpip_{F53DEAF8-0AF5-4875-B565-8ED55C594769} (000D87009D28)
Версия программы Windows 7 Professional
Домен рабочей станции Mydomain
Домен входа Mydomain
Интервал ожидания открытия COM-порта (с) 0
Отсчет передачи COM-порта (байт) 16
Таймаут передачи COM-порта (мс) 250
Команда выполнена успешно.
Как видим, строка Версия программы... тоже может быть использована для определения версии Windows, в среде которой выполняется командный файл. Кроме того, в результатах выполнения команды NET CONFIG WORKSTATION для серверных версий Windows всегда присутствует слово Server.
@echo off
setcurr_OS=
REM
netconfig workstation | find /i "Windows 2000"
if %errorlevel% == 0 set curr_OS=Windows 2000
REM
netconfig workstation | find /i "Windows 2002"
if %errorlevel% == 0 set curr_OS=Windows XP
REM
netconfig workstation | find /i "Server 2003"
if %errorlevel% == 0 set curr_OS=Windows Server 2003
REM
netconfigworkstation|find /i "Windows Vista"
if %errorlevel% == 0 set curr_OS=Windows Vista
REM
netconfig workstation | find /i "Windows 7">nul
if %errorlevel% == 0 set curr_OS=Windows 7
REM Плюспоискпо "Professional"
netconfig workstation | find /i "Версияпрограммы" | find "Professional"
iferrorlevel 0 if not errorlevel 1 set curr_OS=Windows 7 PRO
REM Есливерсиянеизвестна:
if "%curr_OS%"=="" set curr_OS=Unknown
echo %curr_OS%
Кроме рассмотренных способов можно применить еще множество, в том числе, используя утилиту редактирования реестра в командной строке reg.exe. На пример:
RegQuery "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V ProductName - отобразить содержимое параметра реестра с названием Windows. Пример отображаемой информации при выполнении команды в среде Windows 10 Pro:
ProductName REG_SZ Windows 10 Pro
Результат для случая Windows XP Professional:
ProductName REG_SZ MicrosoftWindows XP
Имя параметра ProductName и тип данных REG_SZ можно не отображать, выделив только подстроку с названием системы с помощью FOR:
@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%
При выполнении данного командного файла будет отображаться только название ОС Windows.