【问题标题】:Query environment variable without evaluating it查询环境变量而不评估它
【发布时间】: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 的批处理文件来读取注册表项将是我的最后选择。

标签: java groovy cmd


【解决方案1】:

我认为这是不可能的。当变量被设置时,它被扩展。您可能必须查看 Windows 上的注册表才能获得未扩展的值,并且在 *nix 上会迷失方向,因为您不知道它在哪里设置。其实你也不知道在windows下,有人可以打开一个shell,把变量设置为其他路径,然后启动你的程序,那么注册表值就会过时了。

【讨论】:

    猜你喜欢
    • 2020-11-17
    • 2010-09-24
    • 2021-08-28
    • 2011-07-04
    • 2016-08-27
    • 2020-11-16
    • 2010-10-14
    • 2020-07-12
    • 2018-01-15
    相关资源
    最近更新 更多