¿Cuál es la diferencia entre SETX y SET en variables de entorno en Windows?

¿Cuál es la diferencia entre SETX y SET en variables de entorno en Windows?

¿Cuál es la diferencia entre SETXy SET?

Según tengo entendido:
ambos se utilizan para establecer variables de entorno
SETXy para variables de usuario.
SETes 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.

setmodifica 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.

setxmodifica 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.

ingrese la descripción de la imagen aquí

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.exees un programa que establece variables de entorno de usuario/sistema en elregistro, que se utiliza para la creación de procesos futuros. setes 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=valueestablecerá variables para el proceso hijo cmd.exeque crea (que se adjunta a la cmd.exeventana de la consola principal y no asigna las suyas propias, y hereda el entorno del padre) para que no tenga efecto cuando setlo 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.exeactualizan dinámicamente sus variables de entorno (a diferencia de la mayoría de las otras aplicaciones), por lo que cuando setxni siquiera actualiza el entorno del proceso actual, solo el registro, que es leído por explorer.exeo el explorer.exeproceso . se actualiza mediante la función API de Windows que establece la variable de entorno (menos probable), de modo que los futuros abiertos cmd.exehereden explorer.exeel entorno, ya que son hijos.

información relacionada