Detecta a versão 32/64-bit do Windows Server na CLI

16

Qual é a melhor e mais rápida maneira de detectar se você está executando uma versão de 32 ou 64 bits do Windows Server a partir da linha de comando?

(o Cygwin está instalado)

    
por romant 10.11.2009 / 14:48

10 respostas

11

Uma maneira um pouco mais rápida seria verificar a existência do diretório% ProgramFiles (x86)%. Se existir, então você está rodando 64-bit, se ele não existir, então você está rodando 32-bit.

Quick one-liner:

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

Isso gerará 64-bit se o diretório existir. Isso falharia, no entanto, se não existisse como uma 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 a precisão.

set | find "ProgramFiles(x86)"

ou usando o comando systeminfo anteriormente

systeminfo | find /I "System type"

(incluiu o /I para funcionar em XP / 2003/2008 / etc)

    
por 10.11.2009 / 16:11
21

Que tal:

echo %PROCESSOR_ARCHITECTURE%

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

    
por 08.04.2011 / 17:50
9
systeminfo 

Ele irá listar um pouco, cerca de 10 campos lá embaixo é um chamado System Type. Isso lhe dirá se é x86 ou x64

    
por 10.11.2009 / 14:51
8
systeminfo | find /I "System type"

Isso depende do idioma e lento .

echo %PROCESSOR_ARCHITECTURE%

Observe que é x86 em 32-bit cmd.exe .

maneira correta:

set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 
    
por 05.06.2011 / 12:26
6

Outra maneira de verificar com uma consulta WMI:

PowerShell:

(gwmi win32_computersystem).SystemType

CMD:

wmic OS get OSArchitecture 

Extraído daqui: link

    
por 09.10.2015 / 21:06
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 acima é examinar a variável de ambiente PROCESSOR_ARCHITECTURE :

    echo %PROCESSOR_ARCHITECTURE%

  • No entanto, isso pode fornecer resultados diferentes, dependendo da maneira como o prompt de comando é aberto. Para evitar "resultados inesperados" devido ao WoW64 , você pode lê-lo diretamente do registro (a Microsoft fez não menos do 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 do registro:

    reg query "HKLM\Hardware\Description\System\CentralProcessorProgram Files" /v Identifier

  • Você também pode verificar a existência da versão x86 do diretório PROCESSOR_ARCHITECTURE (ou da variável de ambiente que aponta para ele), uma vez que só existiria em um sistema de 64 bits. Ao contrário da variável ::via env-var , 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:

    • if not defined ProgramFiles(x86) echo 32-bit a ::via file-system

    • if not exist "%systemdrive%\Program Files (x86)" echo 32-bit a cpuinfo.bat

Esses métodos podem ser combinados em um único arquivo em lote (por exemplo, %code% ) e fornecem uma maneira rápida e rápida de verificar o sistema a partir de um prompt de comando padrão do Windows NT sem precisar executar outros programas ou frameworks.

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
@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%pre%" | 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.
" | 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.
    
por 27.06.2012 / 20:28
3

Embora essa não seja a resposta ideal e systeminfo.exe deva ser o método preferido para determinar o tipo de sistema, isto é, 32 bits ou 64 bits, essa solução é executada um pouco mais rápido se você não quiser esperar por systeminfo.exe para 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 string de pesquisa, você também pode verificar versões do sistema operacional desde o Windows 95. systeminfo.exe é mais exato e a maneira correta de consultar, reg.exe query é mais rápido e mais atrasado compatível.

    
por 06.04.2011 / 19:41
2

SOLUÇÃO GENÉRICA

Eu realmente tive que investigar isso 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 antigo Windows 2003 e XP

A resposta será uma das

  • PC baseado em X86
  • PC baseado em x64

PC baseado em x64

Ou se reverter para algumas ferramentas cmd antigas

wmic computersystem get systemtype
    
por 01.12.2015 / 17:40
0

Melhor SOLUÇÃO:

Método 1:
(validação em dois passos 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
set Arch=x64
if "%PROCESSOR_ARCHITECTURE%" == "x86" ( 
    if not defined PROCESSOR_ARCHITEW6432 set Arch=x86
) 


if %Arch% == "x64"  (
    msg * "yessss"
) else  (
    msg * "noooo"
)
" | find /i "x32" > NUL && set OS=32BIT || set OS=64BIT if %OS%==32BIT echo "YESSS" if %OS%==64BIT echo "NOOO"

fonte: link

    
por 15.09.2014 / 13:12
-1

Usando a interface WMI, sob o prompt de comando. Abra o Prompt de Comando como Administrador e digite wmic OS get OSArchitecture e pressione Enter

    
por 17.12.2013 / 00:06