Redirecionar a saída para um argumento de linha de comando de outro comando no Windows

StackOverflow https://stackoverflow.com/questions/1425807

  •  07-07-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top