Stapeläquivalent von Bash Backticks

Wenn ich mit Bash arbeite, kann ich die Ausgabe eines Befehls wie folgt in einen anderen Befehl einfügen:

my_command `echo Test` 

wäre das Gleiche wie

 my_command Test 

(Dies ist natürlich nur ein unpraktisches Beispiel.)

Ich frage mich nur, ob Sie das gleiche in Batch tun können.

Sie können dies tun, indem Sie zuerst die Ausgabe in eine Datei redirect. Beispielsweise:

 echo zz > bla.txt set /p VV= 

Sie können eine ähnliche functionalität mithilfe von cmd.exe-Skripten mit dem Befehl for /f :

 for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a 

Ja, es ist irgendwie nicht offensichtlich (um es milde auszudrücken), aber es ist was da ist.

Siehe for /? für die blutigen Details.

Hinweis: Ich dachte, dass die Verwendung von ” echo ” innerhalb der Backticks in einem ” for /f ” -Befehl mit ” cmd.exe /c echo Test ” erfolgen müsste, da echo ein interner Befehl für cmd.exe , aber es funktioniert auf natürlichere Weise. Windows-Batch-Skripte überraschen mich immer irgendwie (aber meist nicht gut).

Lesen Sie die Dokumentation zum Befehl “for”: for /?

Leider bin ich nicht bei Windows angemeldet, um es selbst zu überprüfen, aber ich denke, dass etwas in etwa so ist, wie du es willst:

 for /F %i in ('echo Test') do my_command %i 

Sie könnten Bash immer in Windows ausführen. Ich mache es die ganze Zeit mit MSYS (viel effizienter als Cygwin ).

Vielleicht vermassele ich die Syntax des Standards for /f Methode, aber wenn ich einen sehr komplexen Befehl verwende, der && und | innerhalb der Backticks in der Grenze der for /f , verursacht es Probleme. Eine leichte Abwandlung vom Üblichen ist möglich, um einen beliebigen Komplexitätsbefehl zu handhaben:

 SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a 

Wenn Sie zuerst Ihren vollständigen und komplexen Befehl in eine Variable schreiben und dann einen Verweis auf die Variable im Limit setzen, anstatt den komplexen Befehl direkt in das Limit der for-Schleife zu setzen, können Sie Syntaxinterpretationsprobleme vermeiden. Wenn ich jetzt den exakten Befehl, den ich im obigen Beispiel auf die Variable VV , in %VV% kopiere, verursacht das Syntaxerrors.