Виявити 32/64-бітну версію Windows Server у 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 / тощо)


це має бути systeminfo | find "System type" Капітолій Т нічого не повертає.
Nathan DeWitt

Так, повністю пропустив це. Дякую Натане! Звичайно, ви можете також використовувати перемикач / I, щоб зробити його також нечутливим.
Джошуа

Сервер 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 полях є одне під назвою Тип системи. Це скаже вам, чи це x86 або x64


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
) 

Повністю погоджуйтеся з вашими думками щодо використання "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

  • Ви також можете перевірити наявність версії x86 Program Filesкаталогу (або змінної середовища, яка вказує на нього), оскільки вона існувала б лише у 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.

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 "знайти", ви можете мати 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


-1

Використовуючи інтерфейс WMI під командним рядком. Відкрийте командний рядок як адміністратор та введіть wmic OS get OSArchitectureта натиснітьEnter

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.