Windows 7 环境变量名称有什么规则吗?

Windows 7 环境变量名称有什么规则吗?

在我的 Windows 7 计算机上,我创建了一些自定义用户环境变量(右键单击计算机 > 属性 > “高级系统设置” > “环境变量...” > “新建...” 中的“用户变量...”),但当我在命令提示符中回显它们时,它似乎无法识别它们。例如,这是我所拥有的:

UTILS_HOME  C:\myUtils
UTILS_WILDFLY  %UTILS_HOME%\wildflyUtils

我将两者都添加到用户变量中的 PATH 变量中,如下所示:

PATH  %UTILS_HOME%;%UTILS_WILDFLY%

当我回应 PATH 时,我得到了这个:

C:\mytils;%UTILS_WILDFLY%

我期望它会扩展 UTILS_WILDFLY,但事实并非如此。现在,如果我将 UTILS_WILDFLY 的名称更改为 JBOSS_8,当我回显路径时,它将被扩展。我尝试了几个名称进行测试,但不明白为什么有些名称会扩展,而有些则不会。当它们不扩展时,我无法在命令行上访问该文件夹中的脚本。

是否存在一些我不知道的命名环境变量的规则,或者这是它的工作方式,我必须反复试验,直到找到一个有效的规则?

尝试不同的名称时没有拼写错误。我创建了变量的名称,并将其剪切并粘贴到 PATH 变量中以排除该问题。

答案1

问题在于您正在使用递归扩展,即 PATH 引用 UTILS_WILDFLY,而 UTILS_WILDFLY 本身又引用 UTILS_HOME。

递归扩展并不总是有效;大概这意味着它不受支持,因此不能保证它会起作用 - 这意味着你不应该使用它 - 但在实践中它有时确实有效,因此造成混淆。

具体来说,在 Windows 7 上,当且仅当递归扩展中间的变量 (UTILS_WILDFLY) 在注册表中的变量列表中出现在正在扩展的变量 (PATH) 之前时,它才会起作用。碰巧的是,环境变量是按字母顺序排列的。

就你的情况来说,

  • UTILS_WILDFLY > PATH,所以它不起作用。

  • JBOSS_8 < PATH,这样就可以了。

PATI 不起作用,但 PATG 可以。

答案2

我也遇到过这样的问题。虽然这个问题已经解决了,但我想为未来的用户提供一个快速的解决方法。

就我的情况而言,我创建了两个环境变量JAVA_HOMEGRADLE_HOME

D:\>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_121

D:\>echo %GRADLE_HOME%
D:\Program Files\gradle-3.5

然后%JAVA_HOME%\bin%GRADLE%_HOME\binPath。但是echo %Path%

D:\Program Files\Java\jdk1.8.0_121\bin;D:\Program Files\Java\jdk1.8.0_12 1\jre;%GRADLE_HOME%\bin;%GROOVY_HOME%\bin; 同样的情况。

我也检查了reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v *@eryksun 的建议,结果是按字母顺序排列的。因此,这个问题的根本原因的答案可能不是 windows 按字母顺序扩展环境变量

我的解决方法是,

GRADLE_HOME -> GGRADLE_HOME 然后,再改回来。 GGRADLE_HOME -> GRADLE_HOME

希望熟悉 Windows 的人能对此类问题作出解释。

相关内容