Pode o Windows 7 aninhar duas variáveis de ambiente?

0

Na GUI:

WORK_HOME=D:\work
LOG_HOME=%WORK_HOME%\logs
FOO_LOG_HOME=%LOG_HOME%\foo

Na linha de comando:

echo %LOG_HOME%
D:\work\logs

mas

echo %FOO_LOG_HOME%
%LOG_HOME%\foo

A única diferença é que a variável usada em% FOO_LOG_HOME% usa outra variável (% LOG_HOME%) que também usa outra variável (% WORK_HOME%), enquanto% LOG_HOME% usa uma variável que é definida como um valor literal (% WORK_HOME %).

Existe alguma maneira de superar essa limitação?

    
por amphibient 26.12.2017 / 19:08

1 resposta

2

Geralmente, o Windows processa variáveis de ambiente no logon em ordem alfabética. Quaisquer variáveis aninhadas no lado direito serão expandidas se já estiverem definidas. Se não estiver definido, a referência da variável aninhada provavelmente será armazenada "como está", completa com sinais de porcentagem.

Como %WORK_HOME% está muito abaixo do alfabeto, não é definido quando essas outras variáveis são processadas.

A única solução que sei é usar nomes de variáveis que são alfabéticos por ordem de expansão.

Parece haver alguma tentativa no Windows 7 de melhorar isso, mas não parece ser confiável o suficiente para confiar:

>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]

>
    
por 27.12.2017 / 03:15