Установка переменных среды и добавление к общесистемному% PATH% с помощью пакетного файла Windows

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;
user2596774
источник

Ответы:

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, исключая пользовательскую часть.

Скотт
источник
HKCU \ Среда для пользовательских переменных. и HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment для system.vars. PATH объединяет / объединяет их
barlop
@ barlop: я не понимаю, что вы говорите.
Скотт
Я не противоречу тому, что вы говорите. И я говорю, что если вы наберете PATH <ENTER>, вы увидите сначала список системного пути, а затем путь пользователя. То есть содержимое переменной PATH состоит из записи реестра для пути системы / компьютера и записи реестра для пути пользователя. Например, первая запись% PATH% является первой в системном пути, а последняя запись является последней в пользовательском пути. потому что если объединяет (объединяет) значения из двух записей, сначала системный путь, а затем пользовательский путь после него.
Барлоп
ХОРОШО; Я предполагал, что ОП уже знал это, из того факта, что в вопросе упоминаются «общесистемный% PATH%», «машинный путь» и «общесистемный путь», и он уже использовал /mопцию для setx.
Скотт
Он не знал записи в реестре, поэтому вы упомянули об этом. И я хочу сказать, что если вы собираетесь рассказать кому-то, где это стоит, для справки, также упомянув, где находится путь пользователя. Тогда он действительно сможет понять, как что-то может быть в одном, а не в другом. На самом деле, без сомнения, вам пришлось бы искать запись реестра системного пути (так как она довольно длинная), и большинство источников информации, которые перечисляют ее, достаточно полезны, чтобы перечислить и пользовательскую. И наличие того и другого полезно для справки кому-либо или, если они не знают, помочь им понять.
Барлоп
0

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

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

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

wendy.krieger
источник
0

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

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

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

Но это не так:

setx PATH "%PATH%;C:\AddYourPathHere" /M
Словить 22
источник