Wenn ich in einer Bash- Umgebung arbeite , um den Wert einer Variablen als Ergebnis eines Befehls festzulegen, gehe ich normalerweise wie folgt vor:
var=$(command -args)
wobei var
der Variablensatz durch den Befehl command -args
. Ich kann dann auf diese Variable als zugreifen$var
.
Eine konventionellere Methode, die mit fast jeder Unix-Shell kompatibel ist, ist:
set var=`command -args`
Wie kann ich jedoch den Wert einer Variablen mit dem Ergebnis eines Befehls in einer Windows-Batchdatei festlegen ? Ich habe es versucht:
set var=command -args
Aber ich finde , dass var
zu festgelegt ist , command -args
anstatt die Ausgabe des Befehls.
quelle
for /f "delims=" %a in ('ver') do @set foobar=%a
auf die Eingabeaufforderung. Verwendungfor /f "delims=" %%a in ('ver') do @set foobar=%%a
in Skriptdateienbash
. Dann können Sie Bash-Befehle schreiben. Sie können auch Bash-Skripte ausführen.Man muss etwas vorsichtig sein, da der Windows-Batch-Befehl:
hat nicht die gleiche Semantik wie die Unix-Shell-Anweisung:
Stellen Sie sich den Fall vor, in dem der Befehl fehlschlägt und einen Fehler verursacht.
In der Unix-Shell-Version erfolgt die Zuweisung zu "theValue" weiterhin, wobei jeder vorherige Wert durch einen leeren Wert ersetzt wird.
In der Windows-Batch-Version wird der Fehler durch den Befehl "for" behandelt, und die Klausel "do" wird nie erreicht. Daher wird der vorherige Wert von "theValue" beibehalten.
Um mehr Unix-ähnliche Semantik im Windows-Batch-Skript zu erhalten, müssen Sie sicherstellen, dass die Zuweisung erfolgt:
Wenn der Wert der Variablen beim Konvertieren eines Unix-Skripts in einen Windows-Stapel nicht gelöscht wird, kann dies zu geringfügigen Fehlern führen.
quelle
command
. zB :for /f "delims=" %%a in ('command1 ^| command2') do set VAR=%%a
.So mache ich das, wenn ich die Ergebnisse einer Datenbankabfrage in meiner Batch-Datei benötige:
Der Schlüssel befindet sich in Zeile 2: "set / p" setzt den Wert von "result" über den Umleitungsoperator "<" auf den Wert der ersten Zeile (nur) in "__query.tmp".
quelle
Ich habe es nur gesehen, wenn Sie dies tun:
ver
ist der Versionsbefehl für Windows und erzeugt auf meinem System:Quelle
quelle
Offizielle Microsoft-Dokumente für den
for
Befehlquelle