Имена переменных между вызываемыми пакетными файлами

Имена переменных между вызываемыми пакетными файлами

Допустим, у меня есть два пакетных файла, 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>

Связанный контент