Ich muss die Ausgabe eines Programms einer Variablen mithilfe einer MS-Batchdatei zuweisen.
Also in GNU Bash Shell würde ich verwenden VAR=$(application arg0 arg1)
. Ich benötige ein ähnliches Verhalten in Windows unter Verwendung einer Batchdatei.
So etwas wie set VAR=application arg0 arg1
.
batch-file
cmd
variable-assignment
windows-console
initialZero
quelle
quelle
for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
Als Ergänzung zu dieser vorherigen Antwort können Pipes in einer for-Anweisung verwendet werden, die durch ein Caret-Symbol gekennzeichnet ist:
quelle
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
Im Allgemeinenusebackq
sollte die Version jedoch zur Verarbeitung komplexer Befehle verwendet werden.for /f "tokens=*" %%i in ('"tasklist | grep explorer"') do set VAR=%%i
. Einfacher für mich, wenn der Befehl selbst keine Anführungszeichen enthält.@OP können Sie for-Schleifen verwenden , um den Rückgabestatus Ihres Programms zu erfassen, wenn es etwas anderes als Zahlen ausgibt
quelle
Angenommen, die Ausgabe Ihrer Anwendung ist ein numerischer Rückkehrcode, können Sie Folgendes tun
quelle
Beim Ausführen:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
Ich habe eine Fehlermeldung erhalten: %% Ich war zu diesem Zeitpunkt unerwartet. Als Fix musste ich oben als ausführenfor /f %i in ('application arg0 arg1') do set VAR=%i
quelle
%%
und außerhalb einer Batch-Datei in einer Befehlszeile, die Sie benötigen%
Zusätzlich zur Antwort können Sie keine Umleitungsoperatoren für die Ausgabe im festgelegten Teil der
for
Schleife verwenden (z. B. wenn Sie die Stderror-Ausgabe eines Benutzers ausblenden und eine schönere Fehlermeldung anzeigen möchten). Stattdessen musst du ihnen mit einem Caret-Zeichen entkommen (^
):Referenz: Leiten Sie die Ausgabe des Befehls in die for-Schleife des Batch-Skripts um
quelle
quelle
Sie können ein Batch-Makro zum einfachen Erfassen von Befehlsausgaben verwenden, ähnlich wie das Verhalten der Bash-Shell.
Die Verwendung des Makros ist einfach und sieht so aus
Und es funktioniert auch mit Rohren
Das Makro verwendet die Variable wie ein Array und speichert jede Zeile in einem separaten Index.
Im Beispiel
%$set% allDrives="wmic logicaldisk
werden die folgenden Variablen erstellt:Um es zu verwenden, ist es nicht wichtig zu verstehen, wie das Makro selbst funktioniert.
Das vollständige Beispiel
quelle
Ich habe das Skript geschrieben, das alle 5 Sekunden an google.com pingt und die Ergebnisse mit der aktuellen Zeit protokolliert. Hier finden Sie die Ausgabe an Variablen "commandLineStr" (mit Indizes)
quelle