Como determino se meu Windows é de 32 ou 64 bits usando um comando? [duplicado]

79

Possíveis duplicatas:
como saber se um computador possui uma CPU ou sistema operacional de 64 bits
Detectar o Windows Server versão 32/64 bits na versão do sistema operacional CLI
: 32 bits ou 64 bits?

Como determino se meu sistema Windows é de 32 ou 64 bits na linha de comando?

Eu quero conhecer a descrição do sistema operacional, não o hardware.

Esta pergunta se aplica estritamente apenas à linha de comando , não quero soluções de GUI.

Negativo
fonte
11
Hmm, é triste que isso systeminfonão esteja listado.
Tamara Wijsman
@MaQleod - eu pessoalmente argumentaria que, apenas porque sua resposta combina com ambos, que as perguntas não são duplicatas exatas, porque esse é um cenário muito mais específico. Eu não sei se a sua resposta se encaixa perfeitamente na 'linha de comando', pois precisa de um utilitário extra, mas se fosse eu, eu a postaria como resposta aqui.
Shinrai 11/08/19
@MaQleod Eu pessoalmente não chamaria isso de duplicado, pois está solicitando uma solução específica apenas para linha de comando. A pergunta que você vinculou tem uma resposta aceita para uma solução de GUI.
Ben Richards
11
Obrigado pela edição + respostas. Eu escolhi a resposta que melhor se adequava à minha situação.
Negativo
Acabei encontrando o que é uma duplicata exata disso. (Pós Linked referencia especificamente de linha de comando apenas, e ainda oferece a minha solução exata.)
Shinrai

Respostas:

123

Em um prompt de comando elevado, digite wmic os get osarchitecture. A saída é bastante óbvia, eu acho - ela retornará "32 bits" ou "64 bits".

Shinrai
fonte
Parece a solução que eu usaria ... Agora que eu sei disso.
James T Snell
2
Ou para fazer a mesma coisa em Powershell se você estiver em uma máquina W7 ou outro sistema operacional windows onde você instalou PS: (gwmi win32_operatingsystem) .OSArchitecture
EBGreen
2
Não está funcionando aqui no Windows XP. Retorna erro: consulta inválida.
user606723
11
Advertência: deve ser um administrador para executar o WMIC.
Breakthrough
@ user606723 - Não tenho uma instalação do XP à mão para testar, mas não achei que os ganchos WMI tivessem mudado tanto. O OP não especificou um sistema operacional, para ser justo, mas vou ter que testar isso sozinho.
Shinrai 12/08/11
56

O programa do console systeminfo mostrará isso. Você deseja procurar a linha "Tipo de sistema:". Para sistemas de 32 bits, dirá "PC baseado em x86". Para sistemas de 64 bits, dirá "PC baseado em x64".

Ou, para um método mais rápido, você pode simplesmente verificar a variável de ambiente PROCESSOR_ARCHITECTURE. Os sistemas de 64 bits dizem que os sistemas AMD64 e os de 32 bits devem dizer "x86". Para verificar isso, você pode simplesmente repetir:

echo %PROCESSOR_ARCHITECTURE%

David Wang, nos Blogs do MSDN, expande este HOWTO: Detectar Process Bitness

Ben Richards
fonte
Isso não mostra o tipo PROCESSOR, não o tipo de sistema operacional instalado?
Shinrai 11/08/11
Acho que não, porque o modo de 32 bits e o de 64 bits são modos diferentes em que o processador pode estar. Um processador pode estar no modo de 32 bits e não acho que o sistema operacional saberia inerentemente se pudesse transição para o modo de 64 bits. No entanto, é um bom ponto, é algo que teria que ser testado. Como sei que meu irmão tem uma instalação do Win 7 de 32 bits em um processador com capacidade de 64 bits, pedirei que ele verifique por mim.
Ben Richards
Sim, não tenho certeza (daí a resposta provisória) e, infelizmente, não tenho nada útil para me verificar. Eu pensei que isso era apenas uma string que um determinado processador relatou, independentemente de como está funcionando. Seria útil ter certeza.
Shinrai 11/08/11
4
Se você executar um sistema operacional de 32 bits em um sistema de 64 bits,% PROCESSOR_ARCHITECTURE% ainda será "x86". Na maioria dos casos, um sistema operacional de 64 bits pode executar programas de 32 bits, mas isso não funciona ao contrário.
bobbymcr
2
-se voto como echo% PROCESSOR_ARCHITECTURE% trabalha mesmo em sql too.where shell de comandos do servidor como OS wmic obter osarchitecture se em algum momento de não funcionar em shell de comandos SQL Server
Durai Amuthan.H
8

Você pode verificar se a %PROGRAMFILES(x86)%variável de ambiente está declarada. Em sistemas de 32 bits, não será definido (apenas %PROGRAMFILES%será). Isso também é mais seguro, basta verificar se o diretório Arquivos de Programas (x86) existe, pois pode ser movido (ou mesmo excluído).

Avanço
fonte
Solução melhor do que procurar a pasta, sim. (Eu não gosto de usar uma solução alternativa, mas se você estiver indo para isso é o único a usar.)
Shinrai
Muito boa captura ... Eu tenho um lote que verifica a pasta, mas isso definitivamente seria mais elegante.
WernerCD
11
Você também pode comparar as variáveis %PROGRAMFILES(x86)%e %PROGRAMFILES%para ver se o cmd foi iniciado no modo 32 bits ou 64 bits. (Como em janelas de 64 bits, você ainda pode executar um cmd de 32 bits.) Exemplo: IF %PROGRAMFILES(x86)%== %PROGRAMFILES%=> cmd de 32 bits (que está sendo executado em janelas de 64 bits .....) IF %PROGRAMFILES(x86)%<> %PROGRAMFILES%=> cmd de 64 bits.
Sam Hasler
8

Eu escrevi um aplicativo simples de linha de comando que informa se o seu processador e o seu sistema operacional são de 64 ou 32 bits.

Exemplo de leitura:

C:\bitchecker
The CPU is 64-bit and the OS is 32-bit

Por solicitação, aqui está a fonte, compilada usando a opção CLI, escrita em AutoIt.

If @CPUARCH = "x86" Then
    $CPUARCH = "32-bit"
Else
    $CPUARCH = "64-bit"
EndIf

If @OSARCH = "x86" Then
    $OSARCH = "32-bit"
Else
    $OSARCH = "64-bit"
EndIf

ConsoleWrite("The CPU is " & $CPUARCH & " and the OS is " & $OSARCH)

E aqui está um exemplo, se você deseja alternar para CPU (-c) e SO (-o):

Dim $CPUARCH, $OSARCH

If @CPUARCH = "x86" Then
    $CPUARCH = "32-bit"
Else
    $CPUARCH = "64-bit"
EndIf

If @OSARCH = "x86" Then
    $OSARCH = "32-bit"
Else
    $OSARCH = "64-bit"
EndIf

If $CmdLine[0] = 0 Then
    ConsoleWrite("The CPU is " & $CPUARCH & " and the OS is " & $OSARCH)
Else
    Select
        Case $CmdLine[1] = "-c"
            ConsoleWrite($CPUARCH)
        Case $CmdLine[1] = "-o"
            ConsoleWrite($OSARCH)
        Case Else
            ConsoleWrite("The CPU is " & $CPUARCH & " and the OS is " & $OSARCH)
    EndSelect
EndIf
MaQleod
fonte
11
Seria bom se o arquivo fosse fornecido com a fonte. É bastante irritante baixar um pequeno exe, postado no mediafire, e executá-lo.
Artifex
11
@artifex, fonte adicionada.
MaQleod
poderia ser falsa U_U jocking :)
Pitto
Seria bom saber o que autoit API está usando internamente ..
user606723
3

E se você apenas verificar a presença de

% SYSTEMROOT% \ Arquivos de Programas (x86)

ou como ele se chama?

James T Snell
fonte
Não é uma super solução, mas talvez trabalhos rápidos e sujos para o seu problema específico?
James T Snell
Você me venceu nesta solução, +1. Uma forma curta pode ser dir \Program *.
Tamara Wijsman