Frage

Wie kann ich in Windows verwenden Sie die Ausgabe eines Skripts / Befehls als Argument für ein anderes Skript? (Ein Rohr | funktioniert hier nicht, denn das andere Skript nicht von der Standardeingabe gelesen wird)

klären: Ich habe AnotherScript, die ein Argument arg benötigt, z.

AnotherScript 12

Jetzt möchte ich das Argument (12 im Beispiel) aus der Ausgabe eines Skripts zu kommen, es ScriptB zu nennen. So würde Ich mag etwas entlang der Linien von

AnotherScript (ScriptB)

Die AnotherScript ist eigentlich ein Python-Skript, das ein Argument erfordert, und ScriptB ist ein Cygwin Bash-Skript, das eine bestimmte Anzahl erzeugt, so dass die Art und Weise Ich mag würde, es zu benutzen ist so etwas wie:

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

Danke für die Antworten. Doch die mühsamen ‚für‘ Konstrukt erforderlich gegeben, ich habe AnotherScript neu geschrieben von der Standardeingabe zu lesen. Das scheint wie eine bessere Lösung.

War es hilfreich?

Lösung

Hinweis: All dies erfordert die Befehle in einer Batch-Datei zu sein. Daraus ergibt sich die doppelte % Zeichen.

Sie können den for Befehl verwenden, um die Ausgabe des Befehls zu erfassen:

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

Dann können Sie diese Ausgabe in einem anderen Befehl verwenden:

AnotherScript %args%

Dies wird %args% bewirken, dass die letzte Zeile von ScriptB der Ausgabe enthält, though. Wenn es nur eine einzige Zeile zurückgibt, kann man diese in eine Zeile rollen:

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

Wenn außerhalb einer Batch-Datei verwendet, Sie haben %x zu verwenden, anstatt %%x.

Wenn jedoch ScriptB mehr als eine Zeile zurückgibt, läuft AnotherScript für jede dieser Linien. Sie können dies umgehen, wenn auch nur in einem Batch-Datei-by nach dem ersten Schleife zu brechen Iteration:

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

Andere Tipps

Sie können die Ausgabe des ersten Skript einer Umgebungsvariablen speichern und der seinen Inhalt als Befehlszeilenparameter an das zweite Skript verwenden, wenn es das ist, was Sie wollen.

So etwas wie folgt aus:

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

Speichern Sie die Daten in eine temporäre Datei?

oder eine Named Pipe anstelle einem Rohr auf der Standard-Ein- und Ausgang.

oder rufen Sie das andere Skript aus dem ersten und überträgt die Daten über den Befehl Argumente

Sind Sie nicht Dinge Weg komplizierter als nötig zu machen?

Rufen AnotherScript von bash. Falls erforderlich, installieren Cygwin nur so können Sie dies tun können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top