Допустим, у меня есть два пакетных файла, foo.bat
и bar.bat
, которые расположены следующим образом:
root\foo.bat
root\grub\bar.bat
Предположим также, что оба файла содержат строку, которая задает переменную, например:
set PWD=%cd%
Теперь, если foo.bat
вызовы .\grub\bar.bat
, будут ли bar.bat
переопределяться PWD
переменные, заданные в foo.bat
?
решение1
Я провел эксперимент. Изменение переменной среды в bar.bat
приводит к ее изменению в foo.bat
. Полагаю, этого следовало ожидать, поскольку переменные среды, заданные с помощью set
команды (не setx
), ограничены сеансом команды.
решение2
область действия глобальна/переменная является общей, как вы и говорите...так что, повторяя ваши слова, да.
также, если вы используете setx, он будет работать для следующего сеанса cmd и будущих, потому что он находится в реестре., но set и setx не следует сравнивать при обсуждении области действия. переменные окружения, как правило, глобальны. Но вы можете использовать setlocal в пакетном файле в начале, и переменные, заданные там, останутся локальными
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>