我正在尝试设置三个环境变量并将它们附加到机器路径。现在我的代码如下:
setx CATALINA_HOME "C:\Program Files (x86)\Apache Software Foundation\Tomcat 7" /m
setx JRE_HOME "C:\Program Files (x86)\Java\jre7" /m
setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m
setx PATH "%PATH%;%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;" /m
前三行单独运行时可以很好地添加变量。但是,最后一行导致删除了部分原始路径,并且没有附加任何附加变量。
我想要的结果是添加三个变量,并使系统范围的路径为
[original path];%JAVA_HOME%\bin;%JRE_HOME%\bin;%CATALINA_HOME%\BIN;
答案1
你的问题部分在于SETX
——SET
在你这样做之后
setx JAVA_HOME "C:\Program Files (x86)\Java\jdk1.7.0_21" /m
…,%JAVA_HOME%
未在命令提示符的该实例中设置。您必须启动一个新实例才能设置%JAVA_HOME%
等。我建议您执行类似
set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_21
setx JAVA_HOME "%JAVA_HOME%" /m
我不明白你为什么要删除原始路径的一部分。 访问/修改用户路径变量,而不是系统路径可能相关。你可能想要做
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path
获取 PATH 变量的系统部分,不包括用户部分。
答案2
如果使用 %var%,则在使用时会展开。如果要设置变量以包含 %var%,则需要写入 %%var%%。
还要注意,注册表设置不会被当前进程看到,而只能被新进程看到。在 winpe 中,注册表中的这些设置永远不会传递给新进程,但 cmd 环境会获取 explorer 环境,而不是注册表。出于这个原因,人们编写了一些实用程序来调整不同的环境。
如果您想将注册表读取到当前 cmd 会话,您可能需要类似 Frank Westlake 的 conset.exe 之类的东西。
答案3
我发现,/M
尽早放置开关就可以达到目的,即使他们希望你将它放在最后。
例如,这是有效的:
setx /M PATH "%PATH%;C:\AddYourPathHere"
但事实并非如此:
setx PATH "%PATH%;C:\AddYourPathHere" /M