Como obter o comando ver para imprimir um arquivo em lote?

1

Estou tendo um problema com um arquivo de lote de construção de um projeto de terceiros no qual estou trabalhando. Ele verifica se o sistema operacional é Windows usando o comando ver . Infelizmente, não consigo imprimir o comando ver do arquivo em lote, como acontece na linha de comando. A saída da linha de comando é:

Microsoft Windows [Version 10.0.15063]

No entanto, quando eu corro em um arquivo de lote:

set v ver
echo %v%

A saída é:

v=10.0
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
VS90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\

O que parece estar me dando a versão do Windows (embora não em detalhes tão completos) e, em seguida, versões de um monte de outras coisas. Existe uma razão pela qual isso funcionaria de forma diferente ou está falhando? Alguém sabe como chamar o comportamento original que é observado na linha de comando? O script de terceiros parece estar esperando o comportamento da versão da linha de comando.

Atualização: com base na resposta abaixo, descobri que, embora isso fosse um problema, não era o problema que causava falhas no arquivo de lote de terceiros. Isso parece ser devido a um problema com findstr ou %ERRORLEVEL% NEQ 0 (já que o problema é que ele acha que não encontrou a string "Windows" na versão).

    
por Namey 03.08.2017 / 23:15

3 respostas

1

Canalize o comando ver para o comando find com o valor "." da forma mostrada abaixo para informar que ele retornará apenas a linha com um ponto do comando ver , já que parece também retornar um espaço em branco linha primeiro. Dessa forma, canalizando-a para find "." , ela somente redirecionará a linha com um ponto para o arquivo.

ver | find ".">temp.txt
SET /P v= < temp.txt
ECHO %v%

Mais recursos

por 03.08.2017 / 23:50
1

Para esclarecer primeiro, se você usar set sem uma atribuição de valor (como set value = 10 ), então set retornará todo o ambiente variáveis que começam como a expressão que você especificou.

set v

listará todas as variáveis cujo nome começa com v .

Eu assumo que você tenha criado previamente uma variável de ambiente v por acidente que contenha "10.0". Isso é o que realmente faz com que a primeira linha de sua saída. Tenho certeza de que isso não é resultado de cmd . Ele é apenas incluído na lista porque seu nome também corresponde ao padrão de pesquisa fornecido.

Infelizmente, é aqui que minhas ideias terminam. Existem algumas soluções sobre como capturar a saída de um comando em uma variável de ambiente, mas não consegui trabalhar com ver :

link link

Desculpe, não posso realmente dar a solução desejada. Espero que eu possa ajudar a resolver algumas coisas embora. Desejando-lhe boa sorte para encontrar a solução perfeita em algum lugar aqui.

    
por 03.08.2017 / 23:30
1

Tente:

for /f "delims=" %a in ('ver') do @set version=%a

Use escapa dupla (% se torna %%) ao usar um arquivo em lotes.

    
por 03.08.2017 / 23:37