Windows-Batch-Skript erhält Umgebungsvariablenänderungen

3127
Jeff Storey

Ich habe ein Skript, das so etwas macht

setx %PATH% %PATH%;%ANOTHER_VAR%  echo %PATH% 

Wenn ich den Pfad wiederhole, enthält er% ANOTHER_VAR% nicht. Gibt es eine Möglichkeit, um sicherzustellen, dass die neuen Variablen beim zweiten Echo% PATH% wiedergegeben werden.

BEARBEITEN: Ich schreibe ein Puppenskript, das zwei separate exec-Befehle aufruft. Der erste ruft setx für eine Variable auf. Da auf den zweiten Befehl in einem neuen exec-Befehl zugegriffen wird, würde ich davon ausgehen, dass er auf die neu gesetzte Variable zugreifen kann, aber nicht.

Ich habe auch versucht, eine Variable in script1 zu erstellen und auf diese von script2 aus zuzugreifen, aber auf sie kann nicht wie erwartet zugegriffen werden.

0

1 Antwort auf die Frage

1
Scott McKinney

Soweit ich es verstehe, setzt setx die Variable über die Registry (siehe diesen Artikel ). Um die Ergebnisse sehen zu können, muss eine neue Befehlsshell gestartet werden.

Wenn Sie die Pfadeinstellung unter der aktuellen Befehlssitzung ändern möchten, verwenden Sie set path=%path%;%another_variable%.

In Antwort auf den Kommentar ist dies von setx / ?:

HINWEIS: 1) SETX schreibt Variablen in die Master-Umgebung in der Registrierung.

2) Auf einem lokalen System sind mit diesem Tool erstellte oder geänderte Variablen in zukünftigen Befehlsfenstern verfügbar, nicht jedoch im aktuellen CMD.exe-Befehlsfenster .

Wenn Sie die Variable in der aktuellen Befehlssitzung ändern möchten, verwenden Sie einfach SET.

Unten ist die Ausgabe meines Systems:

C:\Windows\system32>set path2=%cd%  C:\Windows\system32>set path2 path2=C:\Windows\system32  C:\Windows\system32>cd drivers  C:\Windows\System32\drivers>set path2=%path2%;%cd%  C:\Windows\System32\drivers>set path2 path2=C:\Windows\system32;C:\Windows\System32\drivers 
Hmmm ... ich muss etwas anderes falsch machen. Ich habe ein Skript, das die anderen 2 aufruft, und das 2. Skript nimmt die Änderungen nicht über setx auf. Ich erwarte vielleicht etwas, das nicht passieren sollte. Jeff Storey vor 12 Jahren 0