Ao trabalhar em um ambiente Bash , para definir o valor de uma variável como resultado de um comando, geralmente faço:
var=$(command -args)
onde var
é a variável definida pelo comando command -args
. Posso então acessar essa variável como $var
.
Uma maneira mais convencional de fazer isso, compatível com quase todos os shell Unix, é:
set var=`command -args`
Dito isso, como posso definir o valor de uma variável com o resultado de um comando em um arquivo de lote do Windows ? Eu tentei:
set var=command -args
Mas acho que var
é definido como command -args
em vez da saída do comando.
windows
batch-file
Francis
fonte
fonte
for /f "delims=" %a in ('ver') do @set foobar=%a
no prompt de comando. usarfor /f "delims=" %%a in ('ver') do @set foobar=%%a
em arquivos de scriptbash
. Então você pode escrever comandos bash. Você também pode executar scripts bash.É preciso ter um pouco de cuidado, pois o comando batch do Windows:
não tem a mesma semântica que a instrução do shell Unix:
Considere o caso em que o comando falha, causando um erro.
Na versão shell do Unix, a atribuição a "theValue" ainda ocorre, qualquer valor anterior sendo substituído por um valor vazio.
Na versão em lote do Windows, é o comando "for" que trata o erro, e a cláusula "do" nunca é alcançada - portanto, qualquer valor anterior de "theValue" será retido.
Para obter mais semântica semelhante ao Unix no script de lote do Windows, você deve garantir que a atribuição ocorra:
Deixar de limpar o valor da variável ao converter um script Unix em lote do Windows pode ser uma causa de erros sutis.
fonte
command
; por exemplo:for /f "delims=" %%a in ('command1 ^| command2') do set VAR=%%a
.Veja como faço isso quando preciso dos resultados de uma consulta de banco de dados em meu arquivo em lote:
A chave está na linha 2: "set / p" define o valor de "result" para o valor da primeira linha (apenas) em "__query.tmp" por meio do operador de redirecionamento "<".
fonte
A única maneira que vi acontecer é se você fizer isso:
ver
é o comando de versão para Windows e em meu sistema produz:Fonte
fonte
Documentos oficiais da Microsoft para
for
comandofonte