Проблема:
Зачастую администраторы пишут универсальные командные файлы (батники, bat- и cmd- файлы) для различных по разрядности версий ОС Microsoft Windows, однако при выполнении этих файлов нужно определять какая именно Windows установлена - 32-х либо 64-х битная.
Решение:
Предлагаю следующее решение для определения разрядности ОС Microsoft Windows в командном файле:
Код: Выделить всё
@echo off
TITLE Windows Version Inspection
Set OSbit=_x86
If Defined PROCESSOR_ARCHITEW6432 (Set OSbit=_x64) Else If "%PROCESSOR_ARCHITECTURE%"=="AMD64" Set OSbit=_x64
Echo %OSbit%
В первой строке батника отключаем вывод команд на экран
Во второй - задаем заголовок окна: «Windows Version Inspection»
Затем присваиваем переменной OSbit значение _x86, имея ввиду что, если в следующей строке результаты проверки 64-х битности ОС будут отрицательными, то наша система будет 32-х битной.
Наконец, в четвертой строке, собственно, выполняем проверку. Сначала проверяем - определена ли в системе переменная «PROCESSOR_ARCHITEW6432» - если ДА, то система 64-х битная, затем, если эта переменная не определена, то проверяем значение системной переменной «PROCESSOR_ARCHITECTURE» и, если эта переменная имеет значение AMD64, то значит наша система 64-х битная.
Итак, после этих проверок используем переменную «OSbit» с полученным значением _x64 если ОС Windows 64-х ,битная и со значением _x86, если ОС 32-х битная.
Здесь же приведу примеры bat-файлов (командных файлов), позволяющих определить установленную версию операционной системы Windows (источник):
При помощи команды «Ver»
Код: Выделить всё
@echo off
set curr_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%
В следующей таблице приведено соответствие номера версии Windows ее отображаемому имени:
Номер версии | Отображаемое имя | Год выхода |
3.1 | Windows NT 3.1 | 1993 |
3.5 | Windows NT 3.5 | 1994 |
3.51 | Windows NT 3.51 | 1995 |
4.0 | Windows NT 4.0 | 1996 |
5.0 | Windows 2000 | 2000 |
5.1 | Windows XP | 2001 |
5.2 | Windows XP 64-bit, Windows Server 2003 | 2003 |
6.0 | Windows Vista, Windows Server 2008 | 2006, 2008 |
6.1 | Windows 7, Windows Server 2008 R2 | 2009 |
6.2 | Windows 8, Windows Server 2012 | 2012 |
6.3 | Windows 8.1, Windows Server 2012 R2 | 2013 |
10.0 | Windows 10 | 2015 |
При помощи команды «NET CONFIG WORKSTATION»
Код: Выделить всё
@echo off
set curr_OS=
REM
net config workstation | find /i "Windows 2000"
if %errorlevel% == 0 set curr_OS=Windows 2000
REM
net config workstation | find /i "Windows 2002"
if %errorlevel% == 0 set curr_OS=Windows XP
REM
net config workstation | find /i "Server 2003"
if %errorlevel% == 0 set curr_OS=Windows Server 2003
REM
net config workstation|find /i "Windows Vista"
if %errorlevel% == 0 set curr_OS=Windows Vista
REM
net config workstation | find /i "Windows 7">nul
if %errorlevel% == 0 set curr_OS=Windows 7
REM Плюс поиск по "Professional"
net config workstation | find /i "Версия программы" | find "Professional"
if errorlevel 0 if not errorlevel 1 set curr_OS=Windows 7 PRO
REM Если версия неизвестна:
if "%curr_OS%"=="" set curr_OS=Unknown
echo %curr_OS%