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
(Offensichtlich ist dies nur ein unpraktisches Beispiel.)
Ich frage mich nur, ob Sie in Batch dasselbe tun können.
bash
batch-file
backticks
MiffTheFox
quelle
quelle
Antworten:
Sie können dies tun, indem Sie die Ausgabe zuerst in eine Datei umleiten. Beispielsweise:
quelle
for /f
Variante viel besser.%random%
Sie können eine ähnliche Funktionalität mithilfe von cmd.exe-Skripten mit dem folgenden
for /f
Befehl erhalten:Ja, es ist irgendwie nicht offensichtlich (um es gelinde auszudrücken), aber es ist das, was da ist.
Siehe
for /?
für die blutigen Details.Nebenbemerkung: 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 diesecho
ein interner Befehl istcmd.exe
, aber es funktioniert auf natürlichere Weise. Windows-Batch-Skripte überraschen mich immer irgendwie (aber normalerweise nicht gut).quelle
system()
Dh C's war in Ordnung, iirc, da es auf jeden Fall eine Shell startet, aber .NET'sProcess.Start
muss die Shell explizit aufrufen. So etwas, iirc. Auf jeden Fall halte ich dies für die bessere Antwort als die akzeptierte :-)for
das Problem nicht zu verletzen, sondern zu verwirren. Was ist damit:for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
ist wichtig. Andernfalls wird nur das erste Wort ausgegeben, wenn das Ergebnis des Befehls Leerzeichen enthält. Führen Sie dies an der Eingabeaufforderung aus :for /f %a in ('"echo foo bar"') do echo "%a"
. Es wird gedruckt"foo"
.Lesen Sie die Dokumentation zum Befehl "for":
for /?
Leider bin ich nicht bei Windows angemeldet, um es selbst zu überprüfen, aber ich denke, so etwas kann sich Ihren Wünschen annähern:
quelle
Sie können Bash jederzeit in Windows ausführen . Ich mache es die ganze Zeit mit MSYS (viel effizienter als Cygwin ).
quelle
Vielleicht vermassle ich die Syntax der Standardmethode
for /f
, aber wenn ich einen sehr komplexen Befehl mit && und | setze Innerhalb der Backticks im Limit vonfor /f
verursacht es Probleme. Eine geringfügige Änderung gegenüber dem üblichen ist möglich, um einen beliebigen Komplexitätsbefehl zu handhaben:Indem Sie zuerst Ihren vollständigen und komplexen Befehl in eine Variable einfügen und dann einen Verweis auf die Variable in das Limit einfügen, anstatt den komplexen Befehl direkt in das Limit der for-Schleife zu setzen, können Sie Syntaxinterpretationsprobleme vermeiden. Wenn ich derzeit den genauen Befehl, den ich für die
VV
Variable im obigen Beispiel festgelegt habe, in den Verwendungszweck kopiere%VV%
, verursacht dies Syntaxfehler.quelle