1

Я пытаюсь установить три переменные среды и добавить их к машинному пути. Прямо сейчас мой код выглядит так:

setx CATALINA_HOME "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7" /m
setx JRE_HOME "C:\Program Files (x86)\Java\jre7" /m
setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m
setx PATH "%PATH%;%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;" /m

Первые три при запуске в одиночку работают нормально для добавления переменной. Однако последняя строка приводит к удалению части исходного пути, и ни одна из дополнительных переменных не добавляется.

Мой желаемый результат будет добавление трех переменных и для общесистемного пути

[original path];%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;

3 ответа3

1

Часть вашей проблемы в том, что SETX не SET –– после того, как вы

setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m

…, %JAVA_HOME% не установлен в этом экземпляре командной строки.  Вам нужно запустить новый экземпляр, чтобы получить %JAVA_HOME% , et. al., set.  Я предлагаю вам сделать что-то вроде

set  JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_21
setx JAVA_HOME "%JAVA_HOME%" /m

Я не понимаю, почему вы удаляете часть исходного пути.  Доступ / изменение переменной пути пользователя, а не системный путь может иметь значение.  И вы можете захотеть сделать

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

получить системную часть переменной PATH, исключая пользовательскую часть.

0

Если вы используете% var%, он расширяется при использовании. Если вы хотите, чтобы переменная включала% var%, вам нужно написать %% var %%.

Обратите внимание также, что параметры реестра не видны текущему процессу, но видны только новым процессам. В winpe эти параметры в реестре никогда не передаются новым процессам, но среда cmd получает среду обозревателя, а не реестр. По этой причине люди написали утилиты, которые возят разные среды.

Если вы хотите прочитать реестр в текущем сеансе cmd, вам может понадобиться что-то вроде conset.exe Фрэнка Вестлака.

0

Я обнаружил, что раннее размещение переключателя /M делает свое дело, даже если они хотят, чтобы вы поместили его в конце.

Так, например, это работает:

setx /M PATH "%PATH%;C:\AddYourPathHere"

Но это не так:

setx PATH "%PATH%;C:\AddYourPathHere" /M

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