2

Допустим, у меня есть два пакетных файла, foo.bat и bar.bat , которые расположены примерно так:

root\foo.bat
root\grub\bar.bat

Давайте также скажем, что оба файла содержат строку, которая устанавливает переменную, вот так:

set PWD=%cd%

Теперь, если foo.bat вызывает .\grub\bar.bat , будет ли bar.bat переопределять переменную PWD установленную в foo.bat?

2 ответа2

1

Я провел эксперимент. Изменение переменной окружения в bar.bat приводит к ее изменению в foo.bat . Я предполагаю, что этого следовало ожидать, потому что переменные окружения, установленные с помощью команды set (не setx), попадают в сессию команды.

1

область видимости является глобальной / переменная является общей, как вы говорите .. так, чтобы повторить вас, да.

также, если вы используете 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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .