¿Cuál es la diferencia entre
SETX
ySET
?
Según tengo entendido:
ambos se utilizan para establecer variables de entorno
SETX
y para variables de usuario.
SET
es para variables de shell.
Respuesta1
Me temo que no es tan simple. Las variables de entorno no están limitadas por el alcance, como sugiere, pero tiene razón en que la vida útil del valor en la variable es diferente al comparar los verbos.
set
modifica los valores de entorno del shell actual (la ventana) y el cambio está disponible inmediatamente, pero es temporal. El cambio no afectará a otros shells que se estén ejecutando y, tan pronto como cierre el shell, el nuevo valor se perderá hasta que ejecute set nuevamente.
setx
modifica el valor permanentemente, lo que afecta a todos los shells futuros, pero no modifica el entorno de los shells que ya se están ejecutando. Debe salir del shell y volver a abrirlo antes de que el cambio esté disponible, pero el valor permanecerá modificado hasta que lo cambie nuevamente.
Vea aquí un ejemplo:http://batcheero.blogspot.com/2008/02/set-and-setx.html
Respuesta2
En realidad, podemos establecer variables en tres ámbitos:
1. Shell
2. Usuario
3. Sistema (Máquina) o Global
SET: crea o actualiza el alcance del shell actual para temporal.
C:\Users\977246>set /?
Displays, sets, or removes cmd.exe environment variables.
SET [variable=[string]]
variable Specifies the environment-variable name.
string Specifies a series of characters to assign to the variable.
Type SET without parameters to display the current environment variables.
SETX: crea o actualiza las variables de entorno del usuario actual para que sean permanentes.
C:\Users\977246>setx /?
SetX has three ways of working:
Syntax 1:
SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]
Syntax 2:
SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]
Syntax 3:
SETX [/S system [/U [domain\]user [/P [password]]]]
/F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]
Description:
Creates or modifies environment variables in the user or system
environment. Can set variables based on arguments, regkeys or
file input.
To remove the variable set value to empty string as follows
Example: setx path ""
En las variables de entorno del usuario y del sistema de la GUI.
Respuesta3
Agregando un punto que otros respondedores pasaron por alto.
Para configurar una variable de entorno del sistema en lugar de una variable de entorno del usuario, solo necesitamos usar la opción /m en el comando setx y ejecutarlo desde un símbolo del sistema elevado (administrador).
setx variable value /m
Ejemplo: abra el símbolo del sistema como administrador y ejecute
setx Path "%Path%;C:\Users\User\Libs" /m
Explicación: El comando anterior agregará "C:\Users\User\Libs" a la variable de ruta ya existente (variable de entorno del sistema).
Sin el/metroargumento, realizará cambios o creará una variable de ruta a nivel de usuario únicamente.
Del manual de usuario de setx,
/M Especifica que la variable debe configurarse en el entorno de todo el sistema (HKEY_LOCAL_MACHINE). El valor predeterminado es establecer la variable en el entorno HKEY_CURRENT_USER.
Respuesta4
setx.exe
es un programa que establece variables de entorno de usuario/sistema en elregistro, que se utiliza para la creación de procesos futuros. set
es un comando que muestra elprocesovariables de entorno en el entorno en el bloque de parámetros en el PEB del proceso actual (que muestran las variables de usuario y del sistema, así como las variables definidas por los procesos actuales o principales usando set
), además de permitir que se definan más variables en él mediante El proceso actual y los cambios en el entorno se pueden ver desde el explorador de procesos.
cmd /c set variable=value
establecerá variables para el proceso hijo cmd.exe
que crea (que se adjunta a la cmd.exe
ventana de la consola principal y no asigna las suyas propias, y hereda el entorno del padre) para que no tenga efecto cuando set
lo realice después desde dentro de la misma ventana, porque se refiere al proceso principal cmd.exe
. Los procesos de nivel superior heredan su entorno directamente del registro y explorer.exe
actualizan dinámicamente sus variables de entorno (a diferencia de la mayoría de las otras aplicaciones), por lo que cuando setx
ni siquiera actualiza el entorno del proceso actual, solo el registro, que es leído por explorer.exe
o el explorer.exe
proceso . se actualiza mediante la función API de Windows que establece la variable de entorno (menos probable), de modo que los futuros abiertos cmd.exe
hereden explorer.exe
el entorno, ya que son hijos.