Назад | Перейти на главную страницу

Запретить setx расширять переменную среды?

Я могу добавить к PATH переменную из консоли с помощью следующей команды:

setx PATH "%JAVA_HOME%\bin;%PATH%" /m

Однако, когда я потом проверяю переменную PATH, JAVA_HOME переменная была расширена, так что фактическая PATH выглядит как X:\Path\To\Java\bin;... вместо того %JAVA_HOME%\bin;.... Есть ли способ использовать setx, как я, без JAVA_HOME переменная расширена?

Пробовал использовать двойной %% но это дало мне расширенную версию с процентами на каждом конце. Также пробовал \%, но это все испортило.

Командная оболочка экранируется с помощью ^ персонажа, так что вам нужно избежать % такие персонажи: ^%. Попробуйте это как замену командной строки:

setx PATH ^%JAVA_HOME^%\bin;"%PATH%" /m

Но будьте осторожны, где %PATH% расширяется.

РЕДАКТИРОВАТЬ

Я думаю, что это более безопасный способ сделать это. Первый можно вставить прямо в командную строку:

FOR /F "usebackq skip=2 tokens=2,*" %i IN (`REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path`) DO set origpath=%j
SET newpath=^%JAVA_HOME^%\bin;%origpath%
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v Path_ /t REG_EXPAND_SZ /d "%newpath%

И эту версию можно использовать в пакетном файле:

FOR /F "usebackq skip=2 tokens=2,*" %%i IN (`REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path`) DO set origpath=%%j
SET newpath=%%JAVA_HOME%%\bin;%origpath%
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v Path_ /t REG_EXPAND_SZ /d "%newpath%

В обоих случаях, пожалуйста, протестируйте производственные системы и будьте осторожны. Я считаю, что у меня все получилось правильно, но, возможно, я что-то упустил. Также обратите внимание на отсутствие завершающего " в конце обеих строк 3 намеренно. Вы также должны иметь возможность изменить его для работы с удаленными системами, добавив \\HOSTNAME\ Впереди HKEY_LOCAL_MACHINE.