2017-07-03 5 views
0

Ich versuche, ein Stück einer Stapeldatei auszufällen, das eine Umgebungsvariable auf eine andere Stapeldatei setzt. Dieses Stück ist etwas involviert und ich würde es lieber nicht in mehreren Stapeldateien wiederholen. Ich werde diesen Beitrag nicht mit dem tatsächlichen Code, den ich in der verschachtelten Stapeldatei ausführen möchte, übermäßig komplizieren, sondern werde ein einfaches Beispiel liefern, das zeigt, was ich zu tun versuche und das Problem reproduziert.Festlegen der Umgebungsvariablen in der verschachtelten Stapeldatei

Batch1.cmd

cmd.exe /c setvar.cmd abc def 
set abc 

setvar.cmd

set var=%1 
set val=%2 
set %var%=%val% 

Der Fehler für "gesetzt abc" in Batch1.cmd zurückgekehrt ist dies:

Umgebungsvariable abc nicht definiert

Ich stelle mir vor, cmd.exe startet eine neue Umgebung, weil die Variable bei der Rückkehr zu Batch1.cmd nicht existiert.

Gibt es eine Möglichkeit, eine Batch-Datei verschachteln und die Umgebung, die es erstellt, behalten?

Antwort

3

Der Umgebungsblock wird nicht zwischen Prozessen aufgeteilt. Wenn Sie eine neue cmd Instanz starten, wird ein separater Umgebungsblock erstellt, geändert und zerstört, bevor das Steuerelement an die aktuelle Stapeldatei zurückgegeben wird, die keine Änderung sehen wird, da sie in einem anderen Prozess ausgeführt wurde.

Verwenden Sie call setvar.cmd abc def, um die verschachtelte Stapeldatei im aktuellen Prozess zu starten.

Verwandte Themen