Ist es möglich, die Ausgabe einer Batchdatei einer Anweisung auf eine Variable zu setzen, zum Beispiel:
findstr testing > %VARIABLE%
echo %VARIABLE%
windows
batch-file
Dennis
quelle
quelle
Antworten:
Ich verwende immer USEBACKQ, damit Sie, wenn Sie eine Zeichenfolge oder einen langen Dateinamen einfügen müssen, Ihre doppelten Anführungszeichen verwenden können, ohne den Befehl zu vermasseln.
Wenn Ihre Ausgabe mehrere Zeilen enthält, können Sie dies tun
quelle
ENABLEDELAYEDEXPANSION
|
In diesem Fall funktioniert es nicht.^|
anstelle von|
, wie hiercommand
? Ich bin sicher, dass es einen Code ungleich Null zurückgibt, aber%ERRORLEVEL%
immer 0 enthält, egal wo ich versuche, ihn zu verwenden (sogar innerhalb desdo
Blocks). Ich denke, ein Teil diesesfor
Konstrukts überschreibt es. Übrigens ist es unglaublich, wie verrückt aussehender Code für etwas so Elementares benötigt wird.Ich habe diesen Thread auf dem dortigen Interweb-Ding gefunden. Läuft darauf hinaus:
Sie können die Ausgabe eines Befehls auch in eine temporäre Datei umleiten und dann den Inhalt dieser temporären Datei wie folgt in Ihre Variable einfügen. Es funktioniert jedoch nicht mit mehrzeiliger Eingabe.
Gutschrift für den Thread auf Toms Hardware.
quelle
in einer einzigen Zeile:
Die Befehlsausgabe wird in% g und dann in VAR eingestellt.
Weitere Informationen: https://ss64.com/nt/for_cmd.html
quelle
Eine Datei lesen ...
Eine Datei schreiben
Hinweis; Leerzeichen vor dem Zeichen <> führen dazu, dass auch am Ende der Variablen ein Leerzeichen hinzugefügt wird
Um eine Datei wie ein Logger-Programm hinzuzufügen, erstellen Sie zunächst eine Datei mit einer einzigen Eingabetaste namens e.txt
Ihr Protokoll wird so aussehen
und so weiter
Sowieso ein paar nützliche Dinge
quelle
Diese Antworten waren alle so nah an der Antwort, die ich brauchte. Dies ist ein Versuch, sie zu erweitern.
In einer Batch-Datei
Wenn Sie aus einer
.bat
Datei heraus arbeiten und eine einzelne Zeile möchten, mit der Sie einen komplizierten Befehl wiejq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
in eine Variable mit dem Namen exportieren könnenAWS_ACCESS_KEY
, möchten Sie Folgendes:In der Befehlszeile
Wenn Sie an der
C:\
Eingabeaufforderung eine einzelne Zeile wünschen, mit der Sie einen komplizierten Befehl wiejq -r ".Credentials.AccessKeyId" c:\temp\mfa-getCreds.json
für eine Variable mit dem Namen ausführen könnenAWS_ACCESS_KEY
, möchten Sie Folgendes:Erläuterung
Der einzige Unterschied zwischen den beiden obigen Antworten besteht darin, dass Sie in der Befehlszeile ein einzelnes% in Ihrer Variablen verwenden. In einer Batch-Datei müssen Sie die Prozentzeichen (%%) verdoppeln.
Da der Befehl Doppelpunkte, Anführungszeichen und Klammern enthält, müssen Sie die
USEBACKQ
Zeile in die Optionen aufnehmen, damit Sie mit Backquotes den auszuführenden Befehl und dann alle Arten von lustigen Zeichen darin angeben können.quelle
Wenn Sie nicht in eine temporäre Datei ausgeben und dann in eine Variable einlesen möchten, speichert dieser Code das Ergebnis des Befehls direkt in einer Variablen:
Wenn Sie die Suchzeichenfolge in doppelte Anführungszeichen setzen möchten:
Wenn Sie diesen Code in einer Batchdatei speichern möchten, fügen Sie ein zusätzliches% -Symbol hinzu:
Ein nützliches Beispiel, um die Anzahl der Dateien in einem Verzeichnis zu zählen und in einer Variablen zu speichern: (veranschaulicht Piping)
Beachten Sie die Verwendung von einfachen Anführungszeichen statt doppelten Anführungszeichen "oder Gravis` in der Befehl Klammern. Dies ist sauberere Alternative zu
delims
,tokens
oderusebackq
infor
Schleife.Getestet auf Win 10 CMD.
quelle
quelle
appcmd
ist kein Standardprogramm und ich kann nicht sehen, wo Sie einer Variablen die Programmausgabe zuweisen. Endlich brauchen Sie noch ein paar ErklärungenIch habe es so getestet und es hat funktioniert:
Durch Weiterleiten des Befehls an eine Variable fügt die Eingabeaufforderung das Ergebnis des Befehls "
Cmd
" in die Variable "Var
" ein.Aktualisieren:
Es funktioniert nicht, mein schlechtes, das Skript, das ich gemacht habe, war das folgende:
Es zeigte tatsächlich "sagen wir"
test.txt
", aber es zeigte tatsächlich das Ergebnis des"dir /b *.txt
"Befehls, nicht dasecho %var%
. Ich war verwirrt, da beide Ausgänge gleich waren.quelle
pipe the command into a variable prompt
sollten Sie es geschrieben habendir /b *.txt | SET /P Var=
, um Ihre Rohrrichtung korrekt zu machen. PS: So funktioniert es auch nicht!Ich hoffe das hilft
quelle