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


63

¿Cuál es la diferencia entre SETXy SET?

Según tengo entendido:
ambos se utilizan para establecer variables de entorno
SETXpara las variables de usuario.
SETes para variables de shell.


3
Prueba SET /?y SETX /?, eso debería darte algunas ideas.
Iszi

2
Además, vea las referencias SS64 para SET y SETX . SS64 es una excelente referencia de comandos para varios idiomas y entornos de comandos. Me resulta especialmente útil para CMD y PowerShell.
Iszi



Respuestas:


83

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 de inmediato, 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 el momento en que ejecute set de nuevo.

setxmodifica el valor de forma permanente, 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


13
eso está muy bien escrito, agregaría, sin embargo, que setx cambia el registro
barlop

En realidad, es incluso menos simple que lo descrito aquí. Hay variables de entorno "volátiles" a tener en cuenta. Y, en algunas circunstancias, la lista de variables que muestra el comando SET diferirá dependiendo de si el usuario ha invocado un símbolo del sistema "elevado" o no.
kreemoweet

10

En realidad, podemos establecer variables en tres ámbitos:
1. Shell
2. Usuario
3. Sistema (Máquina) o Global

SET: Crear o actualizar el alcance actual del shell 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 de usuario actuales para permanente.

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 usuario GUI y variables de entorno del sistema.

ingrese la descripción de la imagen aquí


3

Añadiendo un punto que otros respondedores no vieron.

Para establecer 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 ejecutarla desde un Símbolo del sistema elevado (Administrador).

setx variable value /m

Ejemplo: abrir el símbolo del sistema como administrador y ejecutar

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 argumento / m , solo hará cambios o creará una variable de ruta de nivel de usuario.

Del manual de usuario de setx,

/ M Especifica que la variable debe establecerse en el entorno de todo el sistema (HKEY_LOCAL_MACHINE). El valor predeterminado es establecer la variable en el entorno HKEY_CURRENT_USER.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.