
Por alguna razón, hay ciertas variables de entorno que no se expandirán cuando se usen en el"CAMINO"variable en las Variables del sistema.
Por ejemplo, %SystemRoot%
funciona bien pero %WinDir%
no. %ProgramFiles%
y %ProgramFiles(x86)%
tampoco funciona.
Obviamente sé que podría usar la ruta completa en lugar de una variable, pero ese no es el punto.
¿Algunas ideas?
Aquí hay una captura de pantalla/ejemplo:
Respuesta1
SystemRoot
se expande como se esperaba porque es una variable de entorno pseudo/predefinida. WinDir
es una variable de entorno normal y "compite" con otras como PATH
en la secuencia de inicialización.
Mejor explicado por Raymond Chen enConfidencial de Windows: Las variables ocultas: "Incrustar una variable de entorno dentro de otra es simplemente una cuestión de buena sincronización operativa". Citando más:
Así es como funciona el proceso de creación del entorno. Se desarrolla en aproximadamente cuatro pasos:
- Primero, el sistema crea algunas variables de entorno predefinidas para toda la máquina, como SystemRoot y ALLUSERSPROFILE (pero no COMPUTERNAME o ProgramFiles).
- En segundo lugar, crea variables de entorno desde la sección Sistema del cuadro de diálogo Variables de entorno. Las definiciones de variables de entorno del sistema pueden utilizar la notación "%" para referirse a las variables de entorno predefinidas creadas en el paso anterior. Por ejemplo, puede establecer una variable de entorno del sistema en %SystemDrive%\Extras. Una vez que se completa el entorno del sistema, Windows comienza a crear el entorno del usuario.
- El tercer paso es crear variables de entorno predefinidas por usuario, como USERPROFILE y APPDATA. Las variables relacionadas con COMPUTERNAME y ProgramFiles también se crean aquí, aunque técnicamente son variables del sistema y no variables por usuario.
- Finalmente, el sistema crea las variables de entorno. Estos se encuentran en la sección Usuario del cuadro de diálogo Variables de entorno y tienen acceso a cualquier variable creada en los primeros tres pasos, por lo que puede configurar una variable de entorno de usuario en %USERPROFILE%\Extras o una variable de entorno de sistema personalizada establecida en el segundo paso. . Si una variable de entorno de usuario tiene el mismo nombre que una variable de entorno de sistema, el nuevo valor reemplaza al anterior.
...
Un cliente tenía dificultades para configurar la variable de entorno System PATH en %APPDATA%;C:\Windows. Descubrieron que el entorno final simplemente contenía la ruta literal especificada (signos de porcentaje y todo), en lugar de reemplazarla con el valor de la variable de entorno APPDATA. Si observa la secuencia de operaciones detalladas anteriormente, quedará claro por qué ocurrió esto. Estaban intentando establecer una variable de entorno del sistema basada en una variable que aún no se había definido.
La solución fue simple: mover la edición de la RUTA del cuadro de lista Entorno del sistema al cuadro de lista Entorno del usuario. De esa manera, cuando quisiera usar la variable de entorno %APPDATA%, la variable estaría allí.
Para ver un ejemplo sencillo de posibles "condiciones de carrera" al definir variables de entorno basadas en otras, considere el caso circular en el que se definen dos variables del sistema como:
bbb=%ccc%
ccc=%bbb%
En mi Windows 7, esto da como resultado que las variables se evalúen como:
C:\etc>set
...
bbb=%ccc%
ccc=%ccc%