Ordnen Sie die Ausgabe eines Programms in eine variable mit einem MS batch-Datei
Muss ich ordnen Sie die Ausgabe eines Programms in eine variable mit einem MS batch-Datei.
Also in der GNU Bash-shell, die ich benutzen würde VAR=$(application arg0 arg1)
. Ich brauche ein ähnliches Verhalten in Windows mit einer batch-Datei.
Etwas wie set VAR=application arg0 arg1
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit ist:
Andere ist:
Beachten Sie, dass die erste
%
im%%i
wird verwendet, um die Flucht der%
nach es und ist erforderlich, wenn Sie den obigen code in eine batch-Datei statt auf der Kommandozeile. Stell dir vor, deinetest.bat
hat so etwas wie:for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
FOR
Befehl Optionen (d.h.usebackq
unddelims
) kann helfen, eine Menge mit komplexen/langen-Befehle, zum Beispiel MediaInfo:for /F "usebackq delims=^" %%i in (`"C:\progra~2\path\mediainfo.exe --Output=General;%%Duration/String3%% %1"`) do set getter=%%i
Als Ergänzung zu diese Vorherige Antwort, Rohre können verwendet werden, innerhalb einer for-Anweisung, entkam durch ein caret-symbol:
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
Aber im Allgemeinen, dieusebackq
sollte verwendet werden, um komplexe Befehle.@OP, die Sie verwenden können, for-Schleifen zu erfassen, wird der Rückgabestatus des Programms, wenn es gibt etwas anderes als zahlen
vorausgesetzt, dass für Ihre Anwendung die Ausgabe ist ein numerischer return-code, können Sie die folgenden
Auf die Ausführung:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
war ich immer Fehler: %%i war unerwartet zu diesem Zeitpunkt.Als Update, ich hatte ausgeführt, wie Sie oben
for /f %i in ('application arg0 arg1') do set VAR=%i
%%
- und ausserhalb einer batch-Datei über eine Befehlszeile, die Sie brauchen%
Zusätzlich zu der Antwort, können Sie nicht direkt verwenden Umlenkung der Ausgabe-Operatoren in der set Teil
for
Schleife (z.B. wenn Sie wollen, verstecken stderror Ausgabe von einem Benutzer und bieten eine schönere Fehlermeldung). Stattdessen haben Sie zu entkommen, Sie mit einem caret-Zeichen (^
):Referenz: Umleiten der Ausgabe des Befehls in der for-Schleife batch-Skript
Könnte man eine batch-makro für die einfache Aufnahme von Befehls-Ausgänge, ein bisschen wie das Verhalten der bash-shell.
Die Verwendung des Makros ist einfach und sieht aus wie
Und es funktioniert auch mit pipes
Verwendet das makro die variable wie ein array und speichert jede Zeile in eine seperate index.
In der Stichprobe der
%$set% allDrives="wmic logicaldisk
es werden die folgenden Variablen erstellt:Verwenden, es ist nicht wichtig zu verstehen, wie das makro selbst funktioniert.
Das vollständige Beispiel
Ich das Skript schrieb, dass pings google.com alle 5 Sekunden und Protokollierung der Ergebnisse mit der aktuellen Zeit. Hier finden Sie die Ausgabe auf die Variablen "commandLineStr" (mit Indizes)