Risposte:
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-bit
se 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 systeminfo
comando in precedenza
systeminfo | find /I "System type"
(incluso il /I
per lavorare su XP / 2003/2008 / ecc.)
Che ne dite di:
echo %PROCESSOR_ARCHITECTURE%
Ciò restituirà x86 su sistemi a 32 bit e AMD64 (o IA64 ) su sistemi a 64 bit.
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).
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
)
PROCESSOR_ARCHITEW6432
Altro modo per verificare con una query WMI:
PowerShell:
(gwmi win32_computersystem).SystemType
CMD:
wmic OS get OSArchitecture
Estratto da qui: http://www.sysadmit.com/2015/10/windows-como-saber-si-es-de-32-o-64-bits.html
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 Files
directory (o della variabile di ambiente che punta ad essa) poiché esisterebbe solo su un sistema a 64 bit. A differenza della PROCESSOR_ARCHITECTURE
variabile, 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.
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 x64
O se si ripristina ad alcuni strumenti cmd vecchio stile
wmic computersystem get systemtype
Sebbene questa non sia la risposta ideale e systeminfo.exe
dovrebbe 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.exe
completamento 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.
reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Metodo 1:
(Convalida in due passaggi con PROCESSOR_ARCHITECTURE
e 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
systeminfo | find "System type"
Capitol T non restituisce nulla.