在我的 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_HOME
和GRADLE_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\bin
到Path
。但是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 的人能对此类问题作出解释。