Redirection de la sortie vers un argument de ligne de commande d'une autre commande sous Windows

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

  •  07-07-2019
  •  | 
  •  

Question

Comment puis-je, dans Windows, utiliser la sortie d'un script / d'une commande comme argument d'un autre script? (Un tuyau | ne fonctionnera pas ici, car cet autre script ne lit pas à partir de l'entrée standard)

Trop clarifier: j'ai un autre script qui nécessite un argument, par exemple:

AnotherScript 12

Je souhaite maintenant que l'argument (12 dans l'exemple) provienne de la sortie d'un script, appelez-le ScriptB. Je voudrais donc quelque chose dans le sens de

AnotherScript (ScriptB)

AnotherScript est en fait un script python qui nécessite un argument, et ScriptB est un script cygwin bash qui produit un nombre. Par conséquent, la façon dont je voudrais l’utiliser ressemble à ceci:

c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)

Merci pour les réponses. Cependant, compte tenu de la construction laborieuse "pour" requise, j'ai réécrit AnotherScript pour le lire à partir de l'entrée standard. Cela semble être une meilleure solution.

Était-ce utile?

La solution

Remarque: tout cela nécessite que les commandes soient dans un fichier de commandes. D’où le double signe % .

Vous pouvez utiliser la commande pour pour capturer le résultat de la commande:

for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x

alors vous pouvez utiliser cette sortie dans une autre commande:

AnotherScript %args%

Cependant, % args% contiendra la dernière ligne de la sortie de ScriptB , cependant. Si elle ne renvoie qu'une seule ligne, vous pouvez la transformer en une seule ligne:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x

Lorsqu'il est utilisé en dehors d'un fichier de commandes, vous devez utiliser % x au lieu de %% x .

Toutefois, si ScriptB renvoie plusieurs lignes, AnotherScript est exécuté pour chacune de ces lignes. Vous pouvez contourner cette & # 8212; bien que dans un fichier de commandes & # 8212; en interrompant après la première itération de la boucle:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof

Autres conseils

Vous pouvez enregistrer la sortie de votre premier script dans une variable d'environnement et utiliser son contenu comme paramètre de ligne de commande dans le second script, si vous le souhaitez.

Quelque chose comme ça:

for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%

Enregistrer les données dans un fichier temporaire?

ou utilisez un tuyau nommé au lieu d'un tuyau dans l'entrée et la sortie standard.

ou appelez l’autre script du premier et transférez les données via les arguments de la commande

Ne faites-vous pas des choses beaucoup plus compliquées que nécessaire?

Appelez AnotherScript à partir de bash. Si nécessaire, installez Cygwin pour pouvoir le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top