Odpowiedzi:
Nieco szybszym sposobem byłoby sprawdzenie istnienia katalogu% ProgramFiles (x86)%. Jeśli istnieje, to używasz 64-bitowego, jeśli nie istnieje, to używasz 32-bitowego.
Szybki jednowarstwowy:
if exist "%ProgramFiles(x86)%" echo 64-bit
Zostanie wyświetlony, 64-bit
jeśli katalog istnieje. To by się nie powiodło, gdyby nie istniało jako zmienna, ale istniało jako katalog (jako% ProgramFiles (x86)%).
Możesz także użyć narzędzia wyszukiwania, aby uzyskać dokładniejszy sposób określania bitów.
set | find "ProgramFiles(x86)"
lub używając systeminfo
wcześniej polecenia
systeminfo | find /I "System type"
(w tym /I
do pracy w XP / 2003/2008 / etc)
Co powiesz na:
echo %PROCESSOR_ARCHITECTURE%
Zwróci x86 w systemach 32-bitowych i AMD64 (lub IA64 ) w systemach 64-bitowych.
Program Files (x86)
katalog został opublikowany przez kogoś innego. Możesz także sprawdzić, czy istnieje %PROGRAMFILES(X86)%
zmienna środowiskowa (jeśli nie istnieje, to jesteś na komputerze x86).
systeminfo | find /I "System type"
Jest to zależne od ustawień regionalnych i wolne .
echo %PROCESSOR_ARCHITECTURE%
Zauważ, że jest to x86 w wersji 32-bitowej cmd.exe
.
Właściwa droga:
set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" (
if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
)
PROCESSOR_ARCHITEW6432
Inny sposób sprawdzenia za pomocą zapytania WMI:
PowerShell:
(gwmi win32_computersystem).SystemType
CMD:
wmic OS get OSArchitecture
Wyodrębniono stąd: http://www.sysadmit.com/2015/10/windows-como-saber-si-es-de-32-o-64-bits.html
Istnieje wiele sposobów sprawdzenia architektury procesorów w systemie Windows:
Najszybszym, najłatwiejszym i najbardziej kompatybilnym sposobem sprawdzenia architektury procesorów w systemie Windows 2000 i nowszych jest sprawdzenie PROCESSOR_ARCHITECTURE
zmiennej środowiskowej :
echo %PROCESSOR_ARCHITECTURE%
Może to jednak dać różne wyniki, w zależności od sposobu otwarcia wiersza polecenia. Aby uniknąć „nieoczekiwanych wyników” z powodu WoW64 , możesz odczytać go bezpośrednio z rejestru (Microsoft napisał nie mniej niż dwie literówki w kluczu ):
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE
Microsoft sugeruje również odczytanie magazynu informacji o sprzęcie z rejestru:
reg query "HKLM\Hardware\Description\System\CentralProcessor\0" /v Identifier
Możesz także sprawdzić, czy istnieje wersja Program Files
katalogu x86 (lub wskazująca ją zmienna środowiskowa ), ponieważ istniałaby ona tylko w systemie 64-bitowym. W przeciwieństwie do PROCESSOR_ARCHITECTURE
zmiennej, nie zależy to od sposobu uruchomienia wiersza polecenia, ponieważ katalog istnieje (lub nie), niezależnie od tego, jak wiersz jest otwierany:
::via env-var
if not defined ProgramFiles(x86) echo 32-bit
::via file-system
if not exist "%systemdrive%\Program Files (x86)" echo 32-bit
Metody te można łączyć w jednym pliku wsadowym (np. cpuinfo.bat
) I zapewnia przyjemny, błyskawiczny sposób sprawdzania systemu ze standardowego wiersza polecenia systemu Windows NT bez konieczności uciekania się do uruchamiania innych programów lub ram.
Zostało to przetestowane na systemach 32-bitowych i Intel 64-bitowych (proszę przetestować na AMD64), dając prawidłowe wyniki w <1 sekundę:
@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.
Naprawdę musiałem się w to zagłębić i naprawdę rozejrzeć po WMI.
Moim zdaniem najlepszą opcją jest po prostu użycie tego ciągu programu PowerShell
(Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType
Działa to nawet ze starymi Windows 2003 i XP
Odpowiedź będzie jedna z
Komputer z procesorem x64
Lub jeśli powracasz do starych narzędzi cmd
wmic computersystem get systemtype
Chociaż nie jest to idealna odpowiedź i systeminfo.exe
powinna być preferowaną metodą określania typu systemu, tj. 32-bitowego lub 64-bitowego, to rozwiązanie działa nieco szybciej, jeśli nie chcesz czekaćsysteminfo.exe
zakończenie pracy.
Komenda:
reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx"
Przy poprawnych zmianach zapytania rejestru i ciągu wyszukiwania można również sprawdzić wersje systemu operacyjnego już w Windows 95. systeminfo.exe
jest bardziej dokładny, a poprawny sposób zapytania, reg.exe query
jest szybszy i bardziej kompatybilny wstecz.
reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Metoda 1:
(Dwustopniowa walidacja za pomocą PROCESSOR_ARCHITECTURE
i 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"
)
Metoda 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"
źródło: /superuser//a/293143/249349
systeminfo | find "System type"
Capitol T nic nie zwraca.