Rileva la versione di Windows Server 32/64-bit nella CLI


Risposte:


12

Un modo leggermente più rapido sarebbe quello di verificare l'esistenza della directory% ProgramFiles (x86)%. Se esiste, esegui 64 bit, se non esiste, esegui 32 bit.

One-liner rapido:

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

Ciò verrà emesso 64-bitse la directory esiste. Ciò fallirebbe, tuttavia, se non esistesse come variabile ma esistesse come directory (come% ProgramFiles (x86)%).

Puoi anche usare lo strumento Trova per avere un modo più accurato per determinare il testimone.

set | find "ProgramFiles(x86)"

o usando il systeminfocomando in precedenza

systeminfo | find /I "System type"

(incluso il /Iper lavorare su XP / 2003/2008 / ecc.)


dovrebbe essere systeminfo | find "System type" Capitol T non restituisce nulla.
Nathan DeWitt,

Sì, l'ho perso del tutto. Grazie Nathan! Ovviamente, puoi anche usare l'opzione / I per rendere insensibile al maiuscolo / minuscolo.
Giosuè,

Server 2008, in realtà è una "T" maiuscola. In entrambi i casi. Grazie per la risposta - perfetto.
romant

Bene! Sono andato avanti e ho incluso l'opzione / I per passare a systeminfo in modo che possa trovarlo sia che si tratti di un capitale o no! :)
Joshua,

22

Che ne dite di:

echo %PROCESSOR_ARCHITECTURE%

Ciò restituirà x86 su sistemi a 32 bit e AMD64 (o IA64 ) su sistemi a 64 bit.


2
Come mai ha avuto 0 voti? oO (+1)
Apache

1
Questa è una soluzione molto migliore quindi verificare l'esistenza della Program Files (x86)directory come postato da qualcun altro. Puoi anche verificare l'esistenza della %PROGRAMFILES(X86)%variabile d'ambiente (se non esiste, allora sei su una macchina x86).
Sfondamento

3
> Come mai ha avuto 0 voti? Forse perché è non è affidabile .
Synetech,

2
QUESTA RISPOSTA HA PROBLEMI !! - stackoverflow.com/questions/1738985/...
T.Todua

9
systeminfo 

Elencherà un po ', circa 10 campi in basso ce n'è uno chiamato Tipo di sistema. Questo ti dirà se è x86 o x64


8
systeminfo | find /I "System type"

Questo dipende dalle impostazioni locali e lento .

echo %PROCESSOR_ARCHITECTURE%

Si noti che è x86 a 32 bit cmd.exe.

Modo corretto:

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

Completamente d'accordo sui tuoi pensieri sull'uso di "systeminfo". Grazie per il tuo suggerimento, l'ho usato in uno dei miei script
abstrask il

La migliore risposta! con validatore aggiuntivoPROCESSOR_ARCHITEW6432
T.Todua,


5

Esistono numerosi modi per verificare l'architettura del processore in Windows:

  • Il modo più veloce, più semplice e più compatibile per controllare l'architettura del processore in almeno Windows 2000 e versioni successive è esaminare la PROCESSOR_ARCHITECTURE variabile di ambiente :

    echo %PROCESSOR_ARCHITECTURE%

  • Tuttavia, ciò può dare risultati diversi, a seconda del modo in cui viene aperto il prompt dei comandi. Per evitare di ottenere "risultati imprevisti" dovuti a WoW64 , è possibile leggerlo direttamente dal registro (Microsoft ha effettuato non meno di due errori di battitura nella chiave ):

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

  • Microsoft suggerisce inoltre di leggere l'archivio informazioni hardware dal registro:

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

  • È inoltre possibile verificare l'esistenza della versione x86 della Program Filesdirectory (o della variabile di ambiente che punta ad essa) poiché esisterebbe solo su un sistema a 64 bit. A differenza della PROCESSOR_ARCHITECTUREvariabile, ciò non dipende dal modo in cui viene eseguito il prompt dei comandi poiché la directory esiste (o meno) indipendentemente da come viene aperto il prompt:

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

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

Questi metodi possono essere combinati in un singolo file batch (ad esempio, cpuinfo.bat) e forniscono un modo semplice e veloce per controllare il sistema da un prompt dei comandi di Windows NT standard senza dover ricorrere all'esecuzione di altri programmi o framework.

Questo è stato testato su sistemi a 32 bit e Intel a 64 bit (si prega di testare su AMD64), dando risultati corretti in <1 secondo:

@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

SOLUZIONE GENERICA

Ho davvero dovuto scavare in questo e dare un'occhiata reale in WMI.

L'opzione migliore secondo me è semplicemente usare questa stringa di PowerShell

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

Funziona anche con i vecchi Windows 2003 e XP

La risposta sarà una delle

  • PC basato su X86
  • PC basato su x64

PC basato su x64

O se si ripristina ad alcuni strumenti cmd vecchio stile

wmic computersystem get systemtype

2

Sebbene questa non sia la risposta ideale e systeminfo.exedovrebbe essere il metodo preferito per determinare il tipo di sistema, ovvero a 32 o 64 bit, questa soluzione funziona un po 'più velocemente se non si desidera attendere il systeminfo.execompletamento del suo lavoro.

Il comando:

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

Con le modifiche corrette alla query del Registro di sistema e alla stringa di ricerca è anche possibile verificare la presenza di versioni del sistema operativo fino a Windows 95. systeminfo.exeè più preciso e il modo corretto di interrogare, reg.exe queryè più veloce e più retrocompatibile.


Grazie Tom per le modifiche, hai rimosso le informazioni importanti per la risposta e poi hai proceduto all'introduzione di un bug.
Justin,

1
Invece di eseguire il piping dell'output tramite il comando "trova" buggy di Microsoft, puoi fare in modo che REG.EXE tira il valore esatto con l' reg query "HKLM\[..as before..]\Version" /v BuildLabEx
opzione

0

Migliore soluzione:

Metodo 1:
(Convalida in due passaggi con PROCESSOR_ARCHITECTUREe 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"
)

Metodo 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"

fonte: /superuser//a/293143/249349


-1

Utilizzando l'interfaccia WMI, nel prompt dei comandi. Aprire il prompt dei comandi come amministratore, quindi digitare wmic OS get OSArchitecturee premereEnter

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.