我有一些环境variables设置在我的系统首选项(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
为什么最后三个variables没有在PATH中扩展?
完整的PATHvariables是:
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
环境变量(EnvVars)就是它们的名字state: variables ; 他们有一个名称和一个值(在Windows中,值是一个字符串)。
所以在你的例子中,名字是PATH
,值是你列出的字符串。 操作系统(命令解释器)对EnvVar值的语义没有任何意见,所以当它展开var名称时,它只显示它的值。 它不分析值并递归地扩展可能存在的任何其他变量。
如果变量在其他变量中定义(我不建议这样做)是消费者扩展所有这些变量的工作。
处理EnvVars的常见C函数(也许这会有所帮助): ExpandEnvironmentStrings