PATH
我可以使用以下命令从控制台添加到变量:
setx PATH "%JAVA_HOME%\bin;%PATH%" /m
但是,当我随后检查 PATH 变量时,该JAVA_HOME
变量已被扩展,因此实际PATH
看起来像X:\Path\To\Java\bin;...
而不是%JAVA_HOME%\bin;...
。有没有办法像我在这里一样使用 setx 而不JAVA_HOME
扩展变量?
尝试使用 double %%
,但结果只是给出了扩展版本,两端各有一个百分比。也尝试过\%
,但结果搞砸了。
答案1
命令 shell 使用^
字符进行转义,因此您需要%
像这样转义字符:^%
。尝试将其作为替代命令行:
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
。