【发布时间】:2017-05-10 21:52:51
【问题描述】:
我想查询 Path 环境变量而不评估它包含的其他变量。
例如。
variable1 = c:\abc
variable2 = c:\def
variable3 = c:\ghi
JAVA_HOME = c:\java
Path = c:\jkl;%variable1%;%variable2%;%variable3%;%JAVA_HOME%
我要查询路径并获取
c:\jkl;%variable1%;%variable2%;%variable3%;%JAVA_HOME%
不是
c:\jkl;c:\abc;c:\def;c:\ghi;c:\java
为什么?
在我的 groovy 脚本(正在执行 shell 命令)中,我想检查是否在 Path 中设置了 %variable1%(或它的值)。如果没有,我想添加它。我应该这样做吗?
setx path "%path%;%variable1%" /m
其实没有,因为这会放到 Path c:\jkl;c:\def;c:\ghi;c:\java;%variable1%
未来对 JAVA_HOME 的更改将不再反映在 Path 中。 Path 中与我的程序无关的任何其他引用变量都将被更改。这可能不会立即成为问题,但如果其他人决定更改某些内容并期望 Path 反映他们的更改,这可能会影响其他人运行的其他程序。
我目前正在尝试在 Windows 中解决这个问题,但有时也必须在 linux 中做类似的事情。 我目前使用的是 Win 7,但这可以运行多种操作系统。
【问题讨论】:
-
分配路径变量后,它不知道它是由其他变量构建的。
-
切勿使用 setx.exe 将
PATH修改为当前的%PATH%值。 Windows 将PATH分为用户和机器组件。通过将 setx.exe 与%PATH%一起使用,您只是扼杀了这种区别并把事情弄得一团糟。 -
@eryksun 是的,我知道这一点,但愿意接受,因为 Path 的用户变量是我可以依赖的空值。否则是的,那会很糟糕。根据另一个答案,我开始接受这样一个事实,即自动化我想做的事情可能是不可能的。
-
这是可能的,至少在 Windows 上是这样,但使用带有 reg.exe 的批处理文件来读取注册表项将是我的最后选择。