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

32

Estou trabalhando com o InstallAnywhere, um programa antigo para criar instaladores. Eu 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. Eu só posso decidir excluir o arquivo depois que ele já tiver sido 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, o Windows Vista, o Windows 7 etc., mas não o Windows 10. Não posso dizer "Execute esta ação quando o sistema não é XP ou Vista", então eu preciso dizer "Execute esta ação em todas as plataformas, que não são XP ou Vista".

No entanto, posso iniciar comandos da linha de comando e capturar 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?

    
por Dominique 12.05.2016 / 11:08

4 respostas

54

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

Você pode usar wmic .

O seguinte comando 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ção, você pode usar o seguinte arquivo de lote (GetOS.cmd), que irá recuperar e exibir:

  • 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 em %_os , a versão principal do Service Pack é armazenada em %_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 comando for recupera apenas a terceira parte (token) do sistema operacional. Isso funcionará para as versões desktop (se você quiser distinguir o Server 2008 de outras versões, precisará encontrar outra solução).

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

Exemplo de saída:

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

F:\test>

Leitura Adicional

por 12.05.2016 / 12:18
36

Não consigo acreditar neste comando longo nem no ver

C:\>ver

Microsoft Windows [Version 10.0.10586]

C:\>

Funciona em redirecionamentos para que você possa fazer

ver | find "Version 10."

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

    
por 12.05.2016 / 19:27
18

systeminfo

obtém muitas informações úteis, como sistema operacional, tipo de sistema (32/64 bits) e por tanto tempo:

    
por 12.05.2016 / 11:17
1

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

  1. Usando o Cmd

    systeminfo.exe
    

    Usando o comando systeminfo.exe , você pode ver o resultado abaixo do campo OS Name . Isso pode fornecer mais informações do que você precisa.

    Mais informações sobre esse comando podem ser encontradas em Microsoft TechNet .

  2. PowerShell

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

    Get-CimInstance Win32_OperatingSystem | Select-Object  Caption | ForEach{ $_.Caption }
    
por 12.05.2016 / 11:28