Quelle est la différence entre SETX et SET dans les variables d’environnement de Windows?

63

Et quelle est la différence entre SETXet SET?

Selon ma compréhension: les
deux sont utilisés pour définir les variables d'environnement
SETXest pour les variables utilisateur.
SETest pour les variables shell.

Premraj
la source
3
Essayez SET /?et SETX /?- cela devrait vous donner quelques idées.
Iszi
2
Voir également les références SS64 pour SET et SETX . SS64 est une excellente référence de commande pour plusieurs langues et environnements de commande - je le trouve particulièrement utile pour CMD & PowerShell.
Iszi
Ans: superuser.com/a/832962/294054
Première journée le

Réponses:

83

J'ai bien peur que ce ne soit pas si simple. Les variables d'environnement ne sont pas limitées par la portée, comme vous le suggérez, mais vous avez raison de dire que la durée de vie de la valeur dans la variable est différente lors de la comparaison des verbes.

Setmodifie les valeurs d'environnement du shell actuel (de la fenêtre) et la modification est disponible immédiatement, mais elle est temporaire. La modification n'affectera pas les autres shells en cours d'exécution et, dès que vous fermez le shell, la nouvelle valeur est perdue jusqu'à ce que vous exécutiez à nouveau le jeu.

setxmodifie la valeur de façon permanente, ce qui affecte tous les futurs shells, mais ne modifie pas l'environnement des shells en cours d'exécution. Vous devez quitter le shell et le rouvrir avant que la modification ne soit disponible, mais la valeur restera modifiée jusqu'à ce que vous la changiez à nouveau.

Voir ici pour un exemple: http://batcheero.blogspot.com/2008/02/set-and-setx.html

Frank Thomas
la source
13
J'ajouterais cependant que c'est très bien écrit que setx modifie le registre
barlop
C'est en fait encore moins simple que décrit ici. Il faut tenir compte des variables d'environnement "volatiles". Et, dans certaines circonstances, la liste des variables indiquée par la commande SET sera différente selon que l'utilisateur a appelé ou non une invite de commande "élevée".
Kreemoweet
10

En fait, nous pouvons définir une variable sur trois portées:
1. Shell
2. Utilisateur
3. Système (Machine) ou Global

SET: Créer ou mettre à jour la portée actuelle du shell pour temporaire.

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: Créer ou mettre à jour les variables d'environnement utilisateur actuelles pour les 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 ""

Dans les variables d'environnement utilisateur et système de l'interface graphique.

entrez la description de l'image ici

Premraj
la source
3

Ajout d'un point qui a été manqué par d'autres répondeurs.

Pour définir une variable d'environnement système plutôt qu'une variable d'environnement utilisateur, il suffit d'utiliser l'option / m dans la commande setx et de l'exécuter à partir d'une invite de commande élevée (administrateur).

setx variable value /m

Exemple: ouvrez l'invite de commande en tant qu'administrateur et exécutez

setx Path "%Path%;C:\Users\User\Libs" /m

Explanation: La commande ci-dessus va ajouter "C: \ Users \ User \ Libs" à la variable de chemin déjà existante (variable d'environnement système).

Sans l' argument / m , il ne modifiera ou ne créera qu'une variable de chemin d'accès de niveau utilisateur.

À partir du manuel de l'utilisateur setx,

/ M Spécifie que la variable doit être définie dans l'environnement système (HKEY_LOCAL_MACHINE). La valeur par défaut consiste à définir la variable sous l'environnement HKEY_CURRENT_USER.

Renju Jose
la source