batch-file - 我希望使用 cmd 在“系统变量”中设置 MAVEN_HOME -> 以管理员身份运行
问题描述
我正在尝试使用 setx 命令设置 MAVEN_HOME 环境变量,但为了将其设置为“系统变量”而不是“用户变量”。为此,我必须将 -m 与 setx 一起使用。另外,我希望将 MAVEN_HOME 路径设置为运行批处理文件的当前目录路径。我这样做是通过
setx -m MAVEN_HOME "%cd%\apache-maven-3.6.1"
如果我不使用 -m 那么它将 Env_variable 设置为用户变量,如果我使用 -m 并以管理员身份运行它,那么它不会选择当前目录路径,即“C:\Users\nitin\Desktop\KristomInstall\apache -maven-3.6.1" 使用 %cd%。相反,它选择
C:\WINDOWS\System32\
作为使用 %cd% 的路径。
我需要的是使用 -m 并以管理员身份运行它以及获取我正在运行的批处理文件的当前位置的方法(因为我试图使用 %cd% 来做)
setx -m MAVEN_HOME "%cd%\apache-maven-3.6.1"
所以我可以将此批处理文件分发到其他系统,而无需手动添加设置 MAVEN_HOME 的路径。
解决方案
您的问题没有提到它,但行为表明您正在从批处理文件运行它。
首先要注意的是SetX
with/m
将变量写入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
注册表。这是一个受保护的位置,需要您的脚本是Run as administrator
. 如您所见,当发生这种情况时,当前目录通常设置为C:\WINDOWS\System32
。
为了解决这个问题,当您的脚本使用相对路径时,您应该在开始时将目录更改为正在运行的脚本的d
rive 和p
ath,
@Echo Off
CD /D "%~dp0"
SetX MAVEN_HOME "%CD%\apache-maven-3.6.1" /m
或者用运行脚本的rive 和ath替换%CD%
变量。d
p
@Echo Off
SetX MAVEN_HOME "%~dp0apache-maven-3.6.1" /m
请记住,您设置的变量只有在打开新的命令窗口时才会生效。
推荐阅读
- java - 如何使用 class.forName("int[][][]") 获取课程?
- sql - 在发票表上添加汇总行的查询(按单个发票汇总)
- apache-spark - Apache SPARK:哪些 SQL 操作只能由 Spark 通过将所有数据移动到一个分区来执行?
- google-apps-script - 用于谷歌表单的谷歌应用脚本在响应表的相同列中创建了多选网格
- sharepoint - 从 Salesforce 中的 Sharepoint 下载 zip 文件
- php - 使用 laravel 在用户注册表单中填充选择菜单
- go - 从 protos 生成的结构提供了我无法使用的指针
- kubernetes - Azure Kubernetes - 使用 zuul 代理进行 Java 微服务的 oauth2 身份验证
- google-chrome - 如何在新的 Chrome 配置文件上加载解压缩的 chrome 扩展?
- angular - 我们可以从前端下拉按钮以角度更改环境产品文件中的 BASEURL 吗?