Пакетный скрипт Windows получает изменения переменных среды

2923
Jeff Storey

У меня есть скрипт, который делает что-то вроде

setx %PATH% %PATH%;%ANOTHER_VAR%  echo %PATH% 

Когда я повторяю путь, он не включает% ANOTHER_VAR%. Есть ли способ убедиться, что новые переменные отражаются во второй раз, когда я эхо% PATH%

РЕДАКТИРОВАТЬ: я пишу сценарий кукольный, который вызывает 2 отдельные команды exec. Первый вызывает setx для переменной. Так как второй доступен в новой команде exec, я ожидаю, что он будет иметь доступ к вновь установленной переменной, но это не так.

Я также попытался просто создать переменную в script1 и получить доступ к ней из script2, но она недоступна (как и ожидалось).

0

1 ответ на вопрос

1
Scott McKinney

Насколько я понимаю, setx устанавливает переменную через реестр (см. Эту статью ). Требуется запуск новой командной оболочки, чтобы увидеть результаты.

Если вы хотите изменить настройку пути в текущем сеансе команды, используйте set path=%path%;%another_variable%.

В ответ на комментарий это от setx / ?:

ПРИМЕЧАНИЕ: 1) SETX записывает переменные в основную среду в реестре.

2) В локальной системе переменные, созданные или измененные этим инструментом, будут доступны в будущих окнах команд, но не в текущем окне команд CMD.exe .

Если вы хотите изменить переменную в текущем сеансе команды, используйте обычный SET.

Ниже приведен вывод из моей системы:

C:\Windows\system32>set path2=%cd%  C:\Windows\system32>set path2 path2=C:\Windows\system32  C:\Windows\system32>cd drivers  C:\Windows\System32\drivers>set path2=%path2%;%cd%  C:\Windows\System32\drivers>set path2 path2=C:\Windows\system32;C:\Windows\System32\drivers 
Хммм .. Я должен делать что-то еще не так. У меня есть один сценарий, который вызывает другие 2, а второй сценарий не принимает изменения через setx. Я мог бы просто ожидать чего-то, что не должно произойти. Jeff Storey 12 лет назад 0