在 GUI 中:
WORK_HOME=D:\work
LOG_HOME=%WORK_HOME%\logs
FOO_LOG_HOME=%LOG_HOME%\foo
在命令行上:
echo %LOG_HOME%
D:\work\logs
但
echo %FOO_LOG_HOME%
%LOG_HOME%\foo
唯一的区别是 %FOO_LOG_HOME% 中使用的变量使用另一个变量(%LOG_HOME%),该变量也使用另一个变量(%WORK_HOME%),而 %LOG_HOME% 使用设置为文字值(%WORK_HOME%)的变量。
有什么方法可以克服这个限制吗?
答案1
通常,Windows 在登录时按字母顺序处理环境变量。如果已设置,则嵌套在右侧的任何变量都将展开。如果未设置,则嵌套变量引用可能会“按原样”存储,并带有百分号。
由于%WORK_HOME%
在字母表的位置很靠后,因此在处理其他变量时没有定义它。
我知道的唯一解决方法是使用按扩展顺序按字母顺序排列的变量名。
Windows 7 确实试图对此进行一些改进,但似乎不够可靠:
>REG QUERY HKEY_CURRENT_USER\Environment | FINDSTR AUSR
AUSRA REG_SZ alpha
AUSRB REG_EXPAND_SZ bravo %AUSRA%
AUSRC REG_EXPAND_SZ charlie %AUSRB%
AUSRD REG_EXPAND_SZ delta %AUSRC%
AUSRI REG_EXPAND_SZ india %AUSRJ%
AUSRJ REG_EXPAND_SZ juliet %AUSRK%
AUSRK REG_EXPAND_SZ kilo %AUSRL%
AUSRL REG_SZ lima
>SET AU
AUSRA=alpha
AUSRB=bravo alpha
AUSRC=charlie bravo alpha
AUSRD=delta charlie bravo alpha
AUSRI=india %AUSRJ%
AUSRJ=juliet %AUSRK%
AUSRK=kilo lima
AUSRL=lima
>ver
Microsoft Windows [Version 6.1.7601]
>