Wykryj Windows Server wersja 32/64-bit w CLI

Odpowiedzi:

12

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-bitjeś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 systeminfowcześniej polecenia

systeminfo | find /I "System type"

(w tym /Ido pracy w XP / 2003/2008 / etc)

Jozuego
źródło
powinien być systeminfo | find "System type" Capitol T nic nie zwraca.
Nathan DeWitt
Tak, całkowicie tego przegapiłem. Dzięki Nathan! Oczywiście możesz również użyć przełącznika / I, aby rozróżnić wielkość liter.
Joshua
Serwer 2008, to tak naprawdę duża litera „T”. Tak czy inaczej. Dzięki za odpowiedź - idealnie.
romant
W porządku! Poszedłem dalej i dołączyłem opcję / I do systeminfo, aby można było znaleźć, czy jest to wielka litera czy nie! :)
Joshua
22

Co powiesz na:

echo %PROCESSOR_ARCHITECTURE%

Zwróci x86 w systemach 32-bitowych i AMD64 (lub IA64 ) w systemach 64-bitowych.

Gafel
źródło
2
Dlaczego to miało 0 głosów? oO (+1)
Apache
1
Jest to o wiele lepsze rozwiązanie niż sprawdzanie, czy 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).
Przełom
3
> Dlaczego to miało 0 głosów? Może dlatego, że nie jest wiarygodny .
Synetech
2
TA ODPOWIEDŹ MA PROBLEMY !! - stackoverflow.com/questions/1738985/...
T.Todua
9
systeminfo 

Spowoduje to wyświetlenie całkiem sporo, około 10 pól poniżej to jedno o nazwie Typ systemu. Dzięki temu dowiesz się, czy jest to x86 czy x64

MDMarra
źródło
8
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
) 
airmax
źródło
Całkowicie zgódź się z twoimi przemyśleniami na temat używania „systeminfo”. Dzięki za sugestię, wykorzystałem ją w jednym ze swoich skryptów
abstrask
Najlepsza ODPOWIEDŹ! z dodatkowym walidatoremPROCESSOR_ARCHITEW6432
T.Todua
5

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 Fileskatalogu x86 (lub wskazująca ją zmienna środowiskowa ), ponieważ istniałaby ona tylko w systemie 64-bitowym. W przeciwieństwie do PROCESSOR_ARCHITECTUREzmiennej, 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.
Synetech
źródło
3

OGÓLNE ROZWIĄZANIE

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 oparty na X86
  • Komputer z procesorem x64

Komputer z procesorem x64

Lub jeśli powracasz do starych narzędzi cmd

wmic computersystem get systemtype
Dennis
źródło
2

Chociaż nie jest to idealna odpowiedź i systeminfo.exepowinna 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.exejest bardziej dokładny, a poprawny sposób zapytania, reg.exe queryjest szybszy i bardziej kompatybilny wstecz.

Justin
źródło
Dzięki Tomowi za edycję usunąłeś ważne informacje z odpowiedzi, a następnie przystąpiłeś do wprowadzenia błędu.
Justin
1
Zamiast przesyłać dane wyjściowe za pomocą błędnego polecenia „znajdź” Microsoftu, REG.EXE może pobrać dokładną wartość za pomocą przełącznika / v: reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga
0

Lepsze ROZWIĄZANIE:

Metoda 1:
(Dwustopniowa walidacja za pomocą PROCESSOR_ARCHITECTUREi 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

T.Todua
źródło
-1

Za pomocą interfejsu WMI w wierszu polecenia. Otwórz wiersz polecenia jako administrator, wpisz wmic OS get OSArchitecturei naciśnijEnter

Terry
źródło