Eu preciso atribuir a saída de um programa a uma variável usando um arquivo em lotes do MS.
Então, no shell GNU Bash eu usaria VAR=$(application arg0 arg1)
. Eu preciso de um comportamento semelhante no Windows usando um arquivo em lotes.
Algo como set VAR=application arg0 arg1
.
batch-file
cmd
variable-assignment
windows-console
initialZero
fonte
fonte
for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
Como complemento à resposta anterior , os tubos podem ser usados dentro de uma instrução for, escapada por um símbolo de sinal de intercalação:
fonte
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
Mas, em geral, elausebackq
deve ser usada para manipular comandos complexos.for /f "tokens=*" %%i in ('"tasklist | grep explorer"') do set VAR=%%i
. Mais fácil para mim se não houver aspas no próprio comando.@OP, você pode usar loops para capturar o status de retorno do seu programa, se ele gerar algo diferente de números
fonte
supondo que a saída do seu aplicativo seja um código de retorno numérico, você pode fazer o seguinte
fonte
Em execução:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
eu estava recebendo um erro: %% i foi inesperado no momento. Como uma correção, eu tive que executar acima comofor /f %i in ('application arg0 arg1') do set VAR=%i
fonte
%%
e fora de um arquivo de lote em uma linha de comando que você precisa%
Além da resposta, você não pode usar diretamente os operadores de redirecionamento de saída na parte definida do
for
loop (por exemplo, se você deseja ocultar a saída stderror de um usuário e fornecer uma mensagem de erro melhor). Em vez disso, você deve escapar deles com um caractere de intercalação (^
):Referência: Redirecionar a saída do comando para loop for script em lote
fonte
fonte
Você pode usar uma macro em lote para capturar simples as saídas de comando, um pouco como o comportamento do shell bash.
O uso da macro é simples e parece
E funciona mesmo com tubos
A macro usa a variável como uma matriz e armazena cada linha em um índice separado.
Na amostra de
%$set% allDrives="wmic logicaldisk
lá serão criadas as seguintes variáveis:Para usá-lo, não é importante entender como a própria macro funciona.
O exemplo completo
fonte
Eu escrevi o script que faz ping no google.com a cada 5 segundos e registra os resultados com o tempo atual. Aqui você pode encontrar saída para as variáveis "commandLineStr" (com índices)
fonte