阻止setx扩展一个环境variables?

我可以使用以下命令从控制台添加到PATHvariables中:

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

但是,之后检查PATHvariables时, JAVA_HOMEvariables已经被扩展,所以实际的PATH看起来像X:\Path\To\Java\bin;...而不是%JAVA_HOME%\bin;... 有没有像我这样使用setx的方法,而不扩大JAVA_HOMEvariables?

尝试使用双%%但只是给了我在每一个百分比的扩大版本。 还试过\% ,但是这只是搞砸了。

命令shell用^字符转义,所以你需要的是像这样转义%字符: ^% 。 试试这个作为replace命令行:

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% 

而这个版本可以在batch file中使用:

 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行末尾的"末尾"是有意的,您还应该可以通过在HKEY_LOCAL_MACHINE之前加上\\HOSTNAME\来修改它以便在远程系统上运行。