Nehmen wir an, ich habe zwei Batchdateien foo.bat
und bar.bat
, die wie folgt lokalisiert sind:
root\foo.bat
root\grub\bar.bat
Nehmen wir außerdem an, dass beide Dateien eine Zeile enthalten, die eine Variable festlegt, etwa so:
set PWD=%cd%
Wenn nun foo.bat
aufgerufen wird .\grub\bar.bat
, wird die in ? festgelegte Variable bar.bat
überschrieben .PWD
foo.bat
Antwort1
Ich habe ein Experiment durchgeführt. Das Ändern der Umgebungsvariable in bar.bat
bewirkt eine Änderung in foo.bat
. Ich nehme an, das war zu erwarten, da mit dem Befehl festgelegte Umgebungsvariablen set
(nicht setx
) auf die Befehlssitzung beschränkt sind.
Antwort2
Der Gültigkeitsbereich ist global/die Variable wird gemeinsam genutzt, wie Sie sagen. Also, um Ihnen zuzustimmen: ja.
außerdem funktioniert es bei Verwendung von setx für die nächste und alle weiteren cmd-Sitzungen, da es sich in der Registrierung befindet. set und setx sind jedoch nicht miteinander zu vergleichen, wenn es um den Gültigkeitsbereich geht. Umgebungsvariablen sind im Allgemeinen global. Sie können jedoch setlocal zu Beginn in einer Batchdatei verwenden und die dort festgelegten Variablen bleiben lokal.
C:\DOCUME~1\bob>type n.bat <ENTER>
setlocal
set a=99
C:\DOCUME~1\bob>echo %a% <ENTER>
%a%
C:\DOCUME~1\bob>n <ENTER>
C:\DOCUME~1\bob>setlocal
C:\DOCUME~1\bob>set a=99
C:\DOCUME~1\bob>echo %a% <ENTER>
%a%
C:\DOCUME~1\bob>