CMD 环境变量未在 PATH 变量中扩展

问题描述 投票:0回答:2

我在系统首选项中设置了一些环境变量(Windows 8.1)。如果我启动 cmd.exe 并执行此命令:

C:\Users\Carlo>echo %GRAILS_HOME%
D:\Grails

C:\Users\Carlo>echo %GRADLE_HOME%
D:\Gradle

C:\Users\Carlo>echo %GROOVY_HOME%
D:\Groovy

C:\Users\Carlo>echo %PATH%
C:\ProgramData\Oracle\Java\javapath;c:\Program Files (x86)\Intel\iCLSClient\;
c:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;
C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;
C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;
C:\Program Files (x86)\Brackets\command;%GRAILS_HOME%\bin;%GRADLE_HOME%\bin;
%GROOVY_HOME%\bin

为什么最后三个变量没有在 PATH 中扩展?

完整的 PATH 变量是:

C:\ProgramData\Oracle\Java\javapath;c:\Program Files (x86)\Intel\iCLS Client\;c:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Brackets\command;%GRAILS_HOME%\bin;%GRADLE_HOME%\bin;%GROOVY_HOME%\bin
windows cmd path environment-variables
2个回答
0
投票

环境变量(EnvVars)正如其名称所示:变量;它们有一个名称和一个值(在 Windows 中该值是一个字符串)。

因此,在您的示例中,名称是

PATH
,值是您列出的字符串。操作系统(命令解释器)对 EnvVar 值的语义一无所知,因此当它扩展 var 名称时,它只显示其值。它不会分析该值并递归扩展可能存在的任何其他变量。

如果变量是在其他变量中定义的(我不推荐这样做),那么消费者就有责任扩展所有变量。

处理 EnvVars 的常见 C 函数(也许这会有所帮助):ExpandEnvironmentStrings


0
投票

经过一些实验,用户变量在创建时按字母顺序展开,而不会回溯未定义的变量。 因此,任何以 A 到 PASZZZZ 开头的变量都将在 PATH 中扩展,但不会在 PATH 之后扩展任何变量。

我在 PYENV 未在 PATH 中扩展时发现了这一点。 解决方法是创建一个 AAA_PYENV,它确实得到了扩展。

© www.soinside.com 2019 - 2024. All rights reserved.