Detectar a versão 32/64 bits do Windows Server na CLI

Respostas:

12

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-bitse 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 systeminfocomando anteriormente

systeminfo | find /I "System type"

(incluído /Ipara trabalhar em XP / 2003/2008 / etc)

Joshua
fonte
deve ser o systeminfo | find "System type" Capitólio T não retorna nada.
21411 Nathan DeWitt
Sim, perdi completamente isso. Obrigado Nathan! Obviamente, você também pode usar a opção / I para torná-la sem distinção entre maiúsculas e minúsculas.
Joshua
Server 2008, é realmente um 'T' maiúsculo. De qualquer jeito. Obrigado pela resposta - perfeito.
11789 romant
Bem! Fui em frente e incluí a opção / I para informações do sistema, para encontrar se é um capital t ou não! :)
Joshua
22

E se:

echo %PROCESSOR_ARCHITECTURE%

Isso retornará x86 em sistemas de 32 bits e AMD64 (ou IA64 ) em sistemas de 64 bits.

Gaff
fonte
2
Como é que isso teve 0 votos? oO (+1)
Apache
11
Esta é uma solução muito melhor do que verificar a existência do 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).
Breakthrough
3
> Como é que isto teve 0 votos? Talvez porque é não confiável .
21412 Synetech
2
ESTA RESPOSTA TEM PROBLEMAS !! - stackoverflow.com/questions/1738985/...
T.Todua
9
systeminfo 

Ele listará um pouco, cerca de 10 campos abaixo, um chamado Tipo de Sistema. Isso informará se é x86 ou x64

MDMarra
fonte
8
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
) 
airmax
fonte
Concorde completamente com seus pensamentos sobre o uso de 'informações do sistema'. Obrigado por sua sugestão, eu usei isso em um dos meus scripts
abstrask
A melhor resposta! com validador adicionalPROCESSOR_ARCHITEW6432
T.Todua 15/09/14
5

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 Filesdiretório (ou a variável de ambiente que aponta para ele), pois ela existiria apenas em um sistema de 64 bits. Diferente da PROCESSOR_ARCHITECTUREvariá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.
Synetech
fonte
3

SOLUÇÃO GENÉRICA

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 X86
  • PC baseado em x64

PC baseado em x64

Ou, se estiver revertendo para algumas ferramentas antigas de cmd

wmic computersystem get systemtype
Dennis
fonte
2

Embora esta não é a resposta ideal, e systeminfo.exedeve 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.exeterminar 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.

Justin
fonte
Obrigado Tom pelas edições, você removeu informações importantes da resposta e, em seguida, passou a introduzir um bug.
Justin
11
Em vez de canalizar a saída através de buggy da Microsoft "encontrar" comando, você pode ter REG.EXE puxar o valor exato com a opção / v: reg query "HKLM\[..as before..]\Version" /v BuildLabEx
Ti Strga
0

Melhor SOLUÇÃO:

Método 1:
(Validação em duas etapas com 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"
)

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

T.Todua
fonte
-1

Usando a interface WMI, no prompt de comando. Abra o prompt de comando como administrador e digite wmic OS get OSArchitecturee pressioneEnter

Terry
fonte