Respostas:
Uma maneira um pouco mais rápida seria verificar a existência do diretório% ProgramFiles (x86)%. Se existir, você estará executando 64 bits, se não existir, estará executando 32 bits.
Uma linha rápida:
if exist "%ProgramFiles(x86)%" echo 64-bit
Isso será exibido 64-bit
se o diretório existir. Isso falharia, no entanto, se não existisse como variável, mas existisse como um diretório (como% ProgramFiles (x86)%).
Você também pode usar a ferramenta de localização para ter uma maneira mais precisa de determinar o número de bits.
set | find "ProgramFiles(x86)"
ou usando o systeminfo
comando anteriormente
systeminfo | find /I "System type"
(incluído /I
para trabalhar em XP / 2003/2008 / etc)
E se:
echo %PROCESSOR_ARCHITECTURE%
Isso retornará x86 em sistemas de 32 bits e AMD64 (ou IA64 ) em sistemas de 64 bits.
Program Files (x86)
diretório como outra pessoa postou. Você também pode verificar a existência da %PROGRAMFILES(X86)%
variável de ambiente (se ela não existir, estará em uma máquina x86).
systeminfo | find /I "System type"
Depende da localidade e é lento .
echo %PROCESSOR_ARCHITECTURE%
Observe que é x86 em 32 bits cmd.exe
.
Maneira correta:
set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" (
if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
)
PROCESSOR_ARCHITEW6432
Outra maneira de verificar com uma consulta WMI:
PowerShell:
(gwmi win32_computersystem).SystemType
CMD:
wmic OS get OSArchitecture
Extraído daqui: http://www.sysadmit.com/2015/10/windows-como-saber-si-es-de-32-o-64-bits.html
Existem várias maneiras de verificar a arquitetura do processador no Windows:
A maneira mais rápida, fácil e compatível de verificar a arquitetura do processador em pelo menos o Windows 2000 e superior é examinar a PROCESSOR_ARCHITECTURE
variável de ambiente :
echo %PROCESSOR_ARCHITECTURE%
No entanto, isso pode gerar resultados diferentes, dependendo da maneira como o prompt de comando é aberto. Para evitar a obtenção de "resultados inesperados" devido ao WoW64 , você pode lê-lo diretamente do registro (a Microsoft fez nada menos que dois erros de digitação na chave ):
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROCESSOR_ARCHITECTURE
A Microsoft também sugere a leitura do armazenamento de informações de hardware no registro:
reg query "HKLM\Hardware\Description\System\CentralProcessor\0" /v Identifier
Você também pode verificar a existência da versão x86 do Program Files
diretório (ou a variável de ambiente que aponta para ele), pois ela existiria apenas em um sistema de 64 bits. Diferente da PROCESSOR_ARCHITECTURE
variável, isso não depende da maneira como o prompt de comando é executado, pois o diretório existe (ou não), independentemente de como o prompt é aberto:
::via env-var
if not defined ProgramFiles(x86) echo 32-bit
::via file-system
if not exist "%systemdrive%\Program Files (x86)" echo 32-bit
Esses métodos podem ser combinados em um único arquivo em lotes (por exemplo, cpuinfo.bat
) e fornecem uma maneira rápida e agradável de verificar o sistema a partir de um prompt de comando padrão do Windows NT sem precisar recorrer à execução de outros programas ou estruturas.
Isso foi testado em sistemas de 32 bits e Intel de 64 bits (teste no AMD64), fornecendo resultados corretos em <1 segundo:
@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.
Eu realmente tive que me aprofundar nisso e dar uma olhada real no WMI.
A melhor opção, na minha opinião, é simplesmente usar essa string do PowerShell
(Get-WmiObject win32_ComputerSystem -ComputerName $ComputerName).SystemType
Isso funciona mesmo com o Windows 2003 e XP antigo
A resposta será uma das
PC baseado em x64
Ou, se estiver revertendo para algumas ferramentas antigas de cmd
wmic computersystem get systemtype
Embora esta não é a resposta ideal, e systeminfo.exe
deve ser o seu método preferido de determinar o tipo de sistema, ou seja, 32 bits ou 64 bits, esta solução vai um pouco mais rápido se você não quiser esperar para systeminfo.exe
terminar o seu trabalho.
O comando:
reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" | find "BuildLabEx"
Com as alterações corretas na consulta do registro e na cadeia de pesquisa, você também pode verificar as versões do sistema operacional já no Windows 95. systeminfo.exe
é mais exato e a maneira correta de consultar, reg.exe query
é mais rápida e mais compatível com versões anteriores.
reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Método 1:
(Validação em duas etapas com 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"
)
Método 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"
Capitólio T não retorna nada.