Variablennamen zwischen aufgerufenen Batchdateien

Variablennamen zwischen aufgerufenen Batchdateien

Nehmen wir an, ich habe zwei Batchdateien foo.batund 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.bataufgerufen wird .\grub\bar.bat, wird die in ? festgelegte Variable bar.batüberschrieben .PWDfoo.bat

Antwort1

Ich habe ein Experiment durchgeführt. Das Ändern der Umgebungsvariable in bar.batbewirkt 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>

verwandte Informationen