Pregunta ¿Windows 7 puede anidar dos variables de entorno?


En la GUI:

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

En línea de comando:

echo %LOG_HOME%
D:\work\logs

pero

echo %FOO_LOG_HOME%
%LOG_HOME%\foo

La única diferencia es que la variable utilizada en% FOO_LOG_HOME% usa otra variable (% LOG_HOME%) que también usa otra variable (% WORK_HOME%) mientras que% LOG_HOME% usa una variable que se establece en un valor literal (% WORK_HOME%).

¿Hay alguna forma de superar esta limitación?


0


origen


No estoy haciendo "establecer comandos". La parte superior de la publicación dice que estoy configurando dichos vars en la GUI - amphibient
¡Mi error! Me perdí el uso de la parte de la GUI. Me gustaría saber si obtendrás resultados diferentes si no lo hagas usa la GUI - Twisty Impersonator


Respuestas:


En general, Windows procesa las variables de entorno al inicio de sesión en orden alfabético. Cualquier variable anidada en el lado derecho se expandirá si ya están configuradas. Si no se establece, es probable que la referencia de la variable anidada se almacene "tal cual", completa con signos de porcentaje.

Ya que %WORK_HOME% está muy abajo en el alfabeto, no está definido cuando esas otras variables se procesan.

La única solución que conozco es usar nombres de variables que son alfabéticos por orden de expansión.

Parece que hay algún intento en Windows 7 para mejorar esto, pero no parece ser lo suficientemente confiable como 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]

>

2



Si los envars se procesan en orden alfa, ¿por qué LOG_HOME=%WORK_HOME%\logs trabajo, desde %WORK_HOME% sería el último conjunto de envar según el ejemplo del OP? - Wes Sayeed
Hmmm, buen punto. Puede ser que uno esté configurado en el entorno del sistema, el otro en el usuario. Supongo que también podría ser que el registro tenga un valor establecido en REG_SZ y no en REG_EXPAND_SZ. OP, ¿estás buscando una solución de problemas? - Ben Scott
Supongo que, aunque la lista está ordenada alfabéticamente en las interfaces GUI y CLI, probablemente se procesen en el orden en que se almacenaron en el registro, pero no he confirmado esto. Eso parece ser el MO de Microsoft en muchos casos. - Wes Sayeed
Pasé por esto hace unos años en algunos sistemas Vista, y definitivamente era alfabético allí. Supongo que debería volver a verificar Win 7 en caso de que haya cambiado. - Ben Scott
OK, hice algunas pruebas, una respuesta editada para reflejar. Parece que hay algunos el intento de Microsoft de permitir la expansión anidada no alfabética, pero parece limitada e idiosincrásica (como se señaló, que describe la mayor parte de lo que hace Microsoft). - Ben Scott