переменные среды машины пакетного сценария - PullRequest
1 голос
/ 01 марта 2012

У меня есть пакетный скрипт Windows, который получает переменную среды PATH, проверяет, есть ли в ней какое-либо значение, и затем устанавливает его обратно. Например:

SET CURRPATH=%PATH%
:: do some stuff to check for a value in CURRPATH and add the value in if it is not in there
setx PATH %PATH%

Это работает, но проблема в том, что что-то еще, что я установил ранее, создало системную переменную user с именем PATH. Когда я получаю доступ к переменной% PATH% в моем пакетном скрипте, он объединяет как переменную среды пользователя PATH, так и переменную среды машины PATH. Каждый раз, когда я запускаю скрипт, переменная пользователя PATH добавляется к переменной окружения компьютера. Есть ли способ просто получить доступ к переменной окружения машины?

Хотя я мог бы просто удалить переменную среды пользователя PATH, это не очень хорошее общее решение, поскольку я не могу гарантировать, что у людей, запускающих сценарий, возникнет такая же проблема.

Обратите внимание, что это похоже на переменную PATH

1 Ответ

0 голосов
/ 01 марта 2012

В вашем подходе есть по крайней мере еще одна проблема: он расширит любые переменные среды, присутствующие в PATH, что может быть нежелательно. Также вы можете обнаружить, что setx иногда зависает, я полагаю, это связано с тем, что другие приложения не отвечают, как ожидалось, при передаче изменений.

Лучшим решением, вероятно, является создание файла MSI или использование другой хорошо разработанной технологии установщика.

Во-вторых, лучше всего написать приложение (реальное приложение, а не пакетный скрипт) для манипулирования параметром реестра, содержащим переменную среды. Раздел реестра, содержащий переменные среды компьютера, можно найти здесь:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

См. Также этот вопрос в SuperUser. Там есть ответ, который включает решение на основе пакетных файлов, хотя оно не работает надежно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...