
SET
"temporalmente"establece/cambia un environment variable
.
¿Cómo obtengo el "original"/"global"/"sin cambios" de un shell/proceso en el que se ha modificado?
Para explicar el título: SET
funciona en lo que llamaré un
alcance localy SETX
en unglobaluno.
%ABC%
me consigue la variable delalcance local, pero estoy buscando algo para obtenerlo delglobaluno.
De este modo SET
: SETX
:: %ABC%
: ???
Respuesta1
Para evitar confusiones con la terminología utilizada en dominios en redes, en lugar de "local", diga "por usuario" y en lugar de "global", diga "por máquina" (para todos los usuarios locales).
"Local" en realidad significa "sólo en esta máquina" y podría significar paratodousuarios locales.
Las variables por máquina se almacenan en
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Las variables por usuario se almacenan en
HKEY_CURRENT_USER\Environment
SETX puede ser por usuario o por máquina.
SET es temporal (durante la sesión CMD); SETX es permanente (almacenado en el registro).
Las variables configuradas con SETX no están disponibles en ninguna sesión CMD que estuviera abierta en el momento en que se configuraron; Estará disponible en nuevas sesiones de CMD.
Para configurar una variable 'por máquina', use la opción /M con SETX.
Demostración de ejemplo:
Ingrese esto como Administrador:
C:\WINDOWS\system32>setx apps %SystemDrive%\apps /m
SUCCESS: Specified value was saved.
Luego abra otra ventana de cmd como usuario no administrador:
C:\Users\jh>echo %apps%
C:\apps
Aunque las "aplicaciones" son para toda la máquina, %apps% obtiene el valor para un usuario normal.
Entonces, el formato "%ABC%" obtiene variables tanto de usuario como de máquina.
Para borrar esa variable, como administrador, hagasetx apps "" /m