Який найкращий і швидкий спосіб визначити, чи працює ви в командному рядку 32 або 64-бітної версії Windows Server?
(Cygwin встановлений)
Який найкращий і швидкий спосіб визначити, чи працює ви в командному рядку 32 або 64-бітної версії Windows Server?
(Cygwin встановлений)
Відповіді:
Трохи швидшим способом було б перевірити наявність каталогу% 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 / тощо)
Як щодо:
echo %PROCESSOR_ARCHITECTURE%
Це поверне x86 на 32-бітних системах та AMD64 (або IA64 ) на 64-бітних системах.
Program Files (x86)
каталогу, як хтось інший розмістив. Ви також можете перевірити наявність %PROGRAMFILES(X86)%
змінної середовища (якщо вона не існує, ви знаходитесь на машині x86).
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
)
PROCESSOR_ARCHITEW6432
Інший спосіб перевірити WMI-запит:
PowerShell:
(gwmi win32_computersystem).SystemType
CMD:
wmic OS get OSArchitecture
Витягнуто звідси: http://www.sysadmit.com/2015/10/windows-como-saber-si-es-de-32-o-64-bits.html
Існує чимало способів перевірити архітектуру процесора під 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.
Мені справді довелося розібратися в цьому і по-справжньому оглянути WMI.
Найкращий варіант, на мою думку, - просто використовувати цю рядок PowerShell
(Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType
Це навіть працює зі старими Windows 2003 та XP
Відповідь буде однією з
ПК на базі x64
Або якщо повернутися до деяких старомодних інструментів cmd
wmic computersystem get systemtype
Хоча це не є ідеальною відповіддю, і він systeminfo.exe
повинен бути вашим кращим методом визначення типу системи, тобто 32-розрядного або 64-бітного, це рішення працює трохи швидше, якщо ви не хочете чекати, коли systeminfo.exe
закінчиться його робота.
Команда:
reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx"
За допомогою правильних змін до запиту реєстру та рядка пошуку ви також можете перевірити наявність версій операційної системи ще в Windows 95. systeminfo.exe
Більш точний і правильний спосіб запиту, reg.exe query
швидше і сумісніше назад.
reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Спосіб 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
systeminfo | find "System type"
Капітолій Т нічого не повертає.