Redirecionar a saída para um argumento de linha de comando de outro comando no Windows
Pergunta
Como posso, no Windows, use a saída de um script / comando como um argumento para um outro script? (A tubulação | não vai funcionar aqui, uma vez que outro script não lê da entrada padrão)
Too esclarecer: eu tenho AnotherScript que precisa de uma arg argumento, por exemplo:.
AnotherScript 12
Agora eu quero o argumento (12 no exemplo) para vir a partir da saída de um script, chamá-lo ScriptB. Então, eu gostaria de algo ao longo das linhas
AnotherScript (ScriptB)
O AnotherScript é na verdade um script python que requer um argumento, e ScriptB é um script cygwin bash que produz algum número, por isso, do jeito que eu gostaria de usá-lo é algo como:
c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)
Obrigado pelas respostas. No entanto, dada a laboriosa 'para' construção necessário, eu reescrito AnotherScript para ler a partir da entrada padrão. Isso parece ser uma solução melhor.
Solução
Nota: Tudo isso exige os comandos para estar em um arquivo batch. Por isso, os sinais dupla %
.
Você pode usar o comando for
para capturar a saída do comando:
for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x
então você pode usar essa saída em outro comando:
AnotherScript %args%
Esta causa %args%
vontade para conter a última linha da saída do ScriptB
, no entanto. Se ele só retorna uma única linha que você pode rolar isso em uma linha:
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x
Quando usado fora de um arquivo de lote que você tem que usar %x
vez de %%x
.
No entanto, se ScriptB
retorna mais de uma linha, corre AnotherScript
para cada uma dessas linhas. Você pode contornar isso, embora somente dentro de um lote de arquivos por quebrar após a primeira iteração do loop:
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof
Outras dicas
Você pode salvar a saída do seu primeiro roteiro para uma variável de ambiente eo uso do seu conteúdo como parâmetro de linha de comando para o segundo script, se é isso que você quer.
Algo parecido com isto:
for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%
Salvar os dados em um arquivo temporário?
ou usar um pipe nomeado em vez de um tubo no padrão e saída.
ou ligue para o outro script do primeiro e transferir os dados via argumentos de comando
Você não está fazendo as coisas muito mais complicado do que o necessário?
Chamada AnotherScript do bash. Sempre que necessário, instalar Cygwin só assim você pode fazer isso.