防止 setx 扩展环境变量?

防止 setx 扩展环境变量?

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

相关内容