我正在尝试使用 setx 命令设置MAVEN_HOME环境变量,但为了将其设置为"系统变量"而不是"用户变量"。为了做到这一点,我必须将 -m 与 setx 一起使用。另外,我希望MAVEN_HOME路径设置为运行批处理文件的当前目录路径。我这样做是
setx -m MAVEN_HOME "%cd%apache-maven-3.6.1"
如果我不使用 -m,那么它将Env_variable设置为用户变量,如果我使用 -m 并以管理员身份运行它,那么它不会使用 %cd% 选择当前目录路径"C:\Usersitin\Desktop\KristomInstall\apache-maven-3.6.1"。相反,它会选择
C:WINDOWSSystem32
作为使用 %cd% 的路径。
我需要的是使用 -m 并以管理员身份运行它,以及获取我正在运行的批处理文件的当前位置的方法(因为我试图使用 %cd% 来做到这一点(
setx -m MAVEN_HOME "%cd%apache-maven-3.6.1"
所以我可以将此批处理文件分发到其他系统,而无需手动添加路径来设置MAVEN_HOME。
您的问题没有提到它,但该行为表明您正在从批处理文件运行它。
首先要注意的是,带有/m
SetX
将变量写入注册表中的HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment
。这是一个受保护的位置,需要您的脚本Run as administrator
。发生这种情况时,当前目录通常设置为C:WINDOWSSystem32
,正如您所观察到的。
为了满足这一点,当你的脚本使用相对路径时,你应该在一开始就将目录更改为运行脚本的d
rive 和p
ath,
@Echo Off
CD /D "%~dp0"
SetX MAVEN_HOME "%CD%apache-maven-3.6.1" /m
或者将%CD%
变量替换为正在运行的脚本的d
rive 和p
ath。
@Echo Off
SetX MAVEN_HOME "%~dp0apache-maven-3.6.1" /m
请记住,您设置的变量仅在打开新命令窗口时生效。