Como determino se meu sistema é o Windows 10 usando a linha de comando? [duplicado]

32

Estou trabalhando com o InstallAnywhere, um programa antigo para criar instaladores. Gostaria de instalar um arquivo específico, apenas no caso do Windows XP e Windows Vista.

Devido às limitações do InstallAnywhere, isso não é possível. Só posso decidir excluir o arquivo depois que ele já estiver instalado, com base em uma regra.

Dentro dessa regra, posso verificar a plataforma na qual estou executando, o que me dá a possibilidade de verificar o Windows XP, Windows Vista, Windows 7, etc., mas não o Windows 10. Não posso dizer "Executar isso" ação quando o sistema não é XP ou Vista ", então preciso dizer" Execute esta ação em todas as plataformas que não sejam XP ou Vista ".

No entanto, eu posso iniciar comandos de linha de comando e pegar o resultado, então aqui está minha pergunta: existe um comando que eu possa usar para determinar se estou trabalhando em um sistema Windows 10?

Dominique
fonte
winverirá aparecer a caixa de diálogo Sobre o Windows se digitada em cmd ou Iniciar. Isso funcionaria? Como alternativa - stackoverflow.com/questions/1792740/…
Tetsujin
Obrigado pela resposta, mas estou procurando um comando de linha de comando que dê uma resposta na linha de comando, não posso usar as informações de maneira em lote quando uma caixa de mensagens aparece.
Dominique
Verifique a versão do cmd.exe, é a mais fácil e suportada pelo menos desde o XP. Há uma pergunta sobre isso.
KeyWeeUsr
2
versões do cmd do google, cada sistema operacional possui um número de versão diferente, você pode verificar isso e não precisa de nenhum script longo desnecessário ou de outro programa - aqui
#
5
Apenas digite ver. Por exemplo, no meu sistema Windows 7, recebo "Microsoft Windows [Versão 6.1.7601]", que informa que estou executando o Windows 7 (que possui o número de versão 6.1 ).
Andreas Rejbrand

Respostas:

54

Existe um comando para determinar se estou trabalhando em um sistema Windows 10?

Você pode usar wmic.

O comando a seguir retornará a versão do Windows.

wmic os get Caption | findstr /v Caption

Exemplo de saída:

F:\test>wmic os get Caption | findstr /v Caption
Microsoft Windows 7 Home Premium

Se você quiser um pouco mais de informações, poderá usar o seguinte arquivo em lotes (GetOS.cmd), que será recuperado e exibido:

  • Versão do sistema operacional
  • Versão principal do Service Pack
  • Arquitetura (64 ou 32 bits)
@echo off
setlocal
setlocal enabledelayedexpansion
set _os=
set _sp=
rem use findstr to strip blank lines from wmic output
rem get OS
for /f "usebackq skip=1 tokens=3" %%i in (`wmic os get caption ^| findstr /r /v "^$"`) do (
  set "_os=%%i"
  )
rem get Service Pack
for /f "usebackq skip=1 tokens=*" %%i in (`wmic os get ServicePackMajorVersion ^| findstr /r /v "^$"`) do (
  set "_sp=%%i"
  )
rem get Architecture
for /f "usebackq skip=1 tokens=*" %%i in (`wmic OS get OSArchitecture ^| findstr /r /v "^$"`) do (
  set "_bits=%%i"
  )
echo Operating System Version: %_os%
echo Service Pack Major Version: %_sp%
echo Architecture: %_bits%
endlocal

A versão do sistema operacional é armazenada %_os, a versão principal do Service Pack é armazenada %_sp%e a arquitetura é armazenada em %_bits%.

Notas:

  • Não completamente testado, pois não tenho todas as combinações de SO e Service Pack para testá-lo.

  • O forcomando recupera apenas a 3ª parte (token) do sistema operacional. Isso funcionará para as versões da área de trabalho (se você quiser distinguir o Server 2008 de outras versões, precisará encontrar outra solução).

  • %_osirá ser definido como um dos seguintes valores: Server, Vista, 7, 8, 8.1ou 10.

Exemplo de saída:

F:\test>GetOS
Operating System Version: 7
Service Pack Major Version: 1
Architecture: 64-bit

F:\test>

Leitura adicional

DavidPostill
fonte
2
Após alguns testes, decidi usar o seguinte comando:wmic os get Caption | findstr /V Caption
Dominique
@DavidPostill Testei o arquivo em lotes. Eu acho que precisa de umpause antes do endlocalpara dar ao usuário a chance de ler a saída antes que a janela se feche. Isso segue para você também?
Mateus
1
@ Matthew Eu acho que a expectativa é que algum outro sistema esteja executando o arquivo em lotes e capturando sua saída (ou seria chamado manualmente a partir de uma janela de prompt de comando existente).
TripeHound
A pausa @mathew não é necessária na execução do prompt do cmd. A resposta é mostrar a técnica em vez de atender a todos os cenários.
DavidPostill
1
@mathew abra um prompt do cmd onde você salvou o arquivo e digite getos
DavidPostill
35

Eu não posso acreditar neste longo e nenhum comando ver

C:\>ver

Microsoft Windows [Version 10.0.10586]

C:\>

Funciona em redirecionamentos para que você possa fazer

ver | find "Version 10."

Mas você normalmente deve escrever "para esta e todas as versões futuras" para melhor enumerar as versões anteriores.

Joshua
fonte
FYI verse não trabalhar em PowerShell. É CMDespecífico.
Keltari
3
@Keltari Mas iex "ver"faz!
Ben N
A saída de verpode ser um pouco enganadora. Na máquina em que estou sentado, ele retorna Microsoft Windows [Version 6.1.7601]. Mas eu estou bastante certo de que executa o Windows 7, não o Windows 6.
Philipp
@ Philipp Sim, o Windows 7 e 8 são "realmente" lançamentos de patches do Vista, 6.1 e 6.2, respectivamente; a versão principal é estritamente comercializada. Não sei se as alterações no Windows 10 são significativas o suficiente para justificar um problema de versão principal. (Do ponto de vista da engenharia de software de linha-dura, a versão principal de qualquer software só deve ser alterada para indicar uma quebra na compatibilidade com versões anteriores; daí, grandes versões grandes são ruins . Infelizmente, o departamento de marketing gosta de grandes números.)
zwol
1
@Philipp - é fácil encontrar um mapa do número da versão para nomes de marketing, por exemplo, aqui
davidbak
18

Informação do sistema

recebe muitas informações úteis, como sistema operacional, tipo de sistema (32/64 bits) e por muito tempo:

insira a descrição da imagem aqui

cara
fonte
Sim, eu recomendaria systeminfotambém. Como você pode ver na imagem acima, ele exibirá seu sistema operacional e outras informações que você pode precisar.
Mateus
3
Obrigado pela resposta rápida. systeminfode fato, fornece as informações que estou procurando (daí o voto positivo), mas leva bastante tempo (no meu PC, são necessários mais de 15 segundos). Portanto, optei pela wmicsolução, encontrada na próxima resposta.
Dominique
1
Isto é o que peço às pessoas para executar quando eu preciso para descobrir os / versão que eles estão rodando em:cmd /c systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
Andrew Savinykh
1
saída do systeminfo é dependente da linguagem, de modo completamente inútil se você quiser ot executá-lo em uma escala maior
Stephan
1

Não tenho nenhuma experiência com o InstallAnywhere, mas há duas opções para ver qual sistema operacional está instalado usando uma linha de comando.

  1. Usando o Cmd

    systeminfo.exe
    

    Usando o comando systeminfo.exe, você pode ver o resultado sob o campoOS Name . Isso pode lhe dar mais informações do que você precisa.

    Mais informações sobre este comando podem ser encontradas no Microsoft TechNet .

  2. Powershell

    Como alternativa, você pode usar o seguinte script do Powershell, que retornará as informações exatas que você deseja.

    Get-CimInstance Win32_OperatingSystem | Select-Object  Caption | ForEach{ $_.Caption }
    
Tim Mahood
fonte