Я могу добавить к 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
.