Определить версию Windows Server 32/64-bit в CLI

Ответы:

12

Немного более быстрый способ - проверить наличие каталога% ProgramFiles (x86)%. Если он существует, значит, вы используете 64-разрядную версию, если ее нет, значит, вы используете 32-разрядную версию.

Быстрый однострочник:

if exist "%ProgramFiles(x86)%" echo 64-bit

Это выведет, 64-bitесли каталог существует. Однако это не получится, если он не существует как переменная, но существует как каталог (как% ProgramFiles (x86)%).

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

set | find "ProgramFiles(x86)"

или используя systeminfoкоманду ранее

systeminfo | find /I "System type"

(включен /Iдля работы через XP / 2003/2008 / etc)

Джошуа
источник
это должно быть systeminfo | find "System type" Capitol T ничего не возвращает.
Натан Девитт
Да, полностью пропустил это. Спасибо Натан! Конечно, вы также можете использовать ключ / I, чтобы сделать его нечувствительным к регистру.
Иисус Навин
Server 2008, это на самом деле заглавная буква «T». Так или иначе. Спасибо за ответ - отлично.
Роман
Отлично! Я пошел дальше и включил / я переключиться на systeminfo, чтобы он нашел его, независимо от того, является ли он заглавной или нет! :)
Джошуа
22

Как насчет:

echo %PROCESSOR_ARCHITECTURE%

Это вернет x86 в 32-битных системах и AMD64 (или IA64 ) в 64-битных системах.

багор
источник
2
Как получилось, что было 0 голосов? oO (+1)
Apache
1
Это гораздо лучшее решение, чем проверка на наличие Program Files (x86)каталога, как кто-то другой опубликовал. Вы также можете проверить наличие %PROGRAMFILES(X86)%переменной окружения (если она не существует, значит, вы находитесь на компьютере с архитектурой x86).
Прорыв
3
> Как получилось, что было 0 голосов? Возможно, потому что это не надежно .
Synetech
2
У ЭТОГО ОТВЕТА есть ПРОБЛЕМЫ !! - stackoverflow.com/questions/1738985/…
T.Todua
9
systeminfo 

В нем будет довольно много, около 10 полей внизу, одно из которых называется System Type. Это скажет вам, если это x86 или x64

MDMarra
источник
8
systeminfo | find /I "System type"

Это зависит от локали и медленно .

echo %PROCESSOR_ARCHITECTURE%

Обратите внимание, что это 32-разрядная версия x86cmd.exe .

Правильный путь:

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 
Airmax
источник
Полностью согласен с вашими мыслями об использовании 'systeminfo'. Спасибо за ваше предложение, я использовал это в одном из моих сценариев
abstrask
Лучший ответ! с дополнительным валидаторомPROCESSOR_ARCHITEW6432
T.Todua
5

Существует множество способов проверить архитектуру процессора под Windows:

  • Самый быстрый, простой и совместимый способ проверить архитектуру процессора как минимум в Windows 2000 и выше - это проверить PROCESSOR_ARCHITECTURE переменную среды :

    echo %PROCESSOR_ARCHITECTURE%

  • Однако это может дать разные результаты, в зависимости от способа открытия командной строки. Чтобы избежать «неожиданных результатов» из-за WoW64 , вы можете прочитать его непосредственно из реестра (Microsoft сделала не менее двух опечаток в ключе ):

    reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE

  • Microsoft также предлагает прочитать информацию об оборудовании из реестра:

    reg query "HKLM\Hardware\Description\System\CentralProcessor\0" /v Identifier

  • Вы также можете проверить существование Program Filesкаталога x86 (или переменной среды, которая на него указывает), поскольку он существует только в 64-битной системе. В отличие от PROCESSOR_ARCHITECTUREпеременной, это не зависит от способа запуска командной строки, поскольку каталог существует (или нет) независимо от того, как открывается приглашение:

    • ::via env-var
      if not defined ProgramFiles(x86) echo 32-bit

    • ::via file-system
      if not exist "%systemdrive%\Program Files (x86)" echo 32-bit

Эти методы могут быть объединены в один пакетный файл (например, cpuinfo.bat) и предоставляют хороший, молниеносный способ проверки системы из стандартной командной строки Windows NT без необходимости прибегать к запуску других программ или сред.

Это было протестировано на 32-битных и 64-битных системах Intel (пожалуйста, протестируйте на AMD64), давая правильные результаты в течение <1 секунды:

@echo off

echo PROCESSOR_ARCHITECTURE var:
echo %PROCESSOR_ARCHITECTURE% | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo PROCESSOR_ARCHITECTURE reg:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo CentralProcessor reg:
reg query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x86" > nul
if %errorlevel%==0 (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo ProgramFiles(x86) var:
if not defined ProgramFiles(x86) (
    echo   32-bit
) else (
    echo   64-bit
)
echo.

echo ProgramFiles(x86) dir:
if not exist "%systemdrive%\Program Files (x86)" (
    echo   32-bit
) else (
    echo   64-bit
)
echo.
Synetech
источник
3

ОБЩЕЕ РЕШЕНИЕ

Мне действительно пришлось покопаться в этом и по-настоящему осмотреться в WMI.

На мой взгляд, лучший вариант - просто использовать эту строку PowerShell.

(Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType

Это даже работает со старыми Windows 2003 и XP

Ответ будет одним из

  • ПК на базе X86
  • ПК на базе x64

ПК на базе x64

Или если вернуться к старомодным инструментам cmd

wmic computersystem get systemtype
Деннис
источник
2

Хотя это не идеальный ответ и systeminfo.exeдолжен быть вашим предпочтительным методом определения типа системы, т. Е. 32-битной или 64-битной, это решение работает немного быстрее, если вы не хотите ждать systeminfo.exeокончания своей работы.

Команда:

reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx"

С правильными изменениями в запросе реестра и строке поиска вы также можете проверить версии операционной системы, начиная с Windows 95. systeminfo.exeБолее точный и правильный способ запроса, reg.exe queryболее быстрый и более обратно совместимый.

Джастин
источник
Спасибо Тому за правки, вы удалили важную информацию из ответа, а затем приступили к фактическому введению ошибки.
Джастин,
1
Вместо того, чтобы передавать результаты с помощью ошибочной команды Microsoft «find», вы можете использовать REG.EXE для получения точного значения с помощью ключа / v: reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga
0

Лучшее решение:

Метод 1:
(двухэтапная проверка с помощью PROCESSOR_ARCHITECTUREи PROCESSOR_ARCHITEW6432)

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 


if %Arch% == "x64"  (
    msg * "yessss"
) else  (
    msg * "noooo"
)

Способ 2:

reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /i "x32" > NUL && set OS=32BIT || set OS=64BIT

if %OS%==32BIT echo "YESSS"
if %OS%==64BIT echo "NOOO"

источник: /superuser//a/293143/249349

T.Todua
источник
-1

Используя интерфейс WMI, в командной строке. Откройте командную строку от имени администратора, введите wmic OS get OSArchitectureи нажмитеEnter

Терри
источник