web-dev-qa-db-fra.com

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

Quelle est la différence entre SETX et SET?

Selon ma compréhension:
Les deux sont utilisés pour définir les variables d'environnement
SETX est destiné aux variables utilisateur.
SET est pour les variables Shell.

56
Premraj

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.

Set modifie les valeurs d'environnement du shell actuel (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.

setx modifie 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

77
Frank Thomas

En fait, nous pouvons définir une variable sur trois portées:
1. coquille
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.

 enter image description here

9
Premraj

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.

2
Renju Jose