106 votes

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

Quelle est la différence entre SETX y SET ?

D'après ce que j'ai compris :
Les deux sont utilisés pour définir les variables d'environnement
SETX est pour les variables utilisateur.
SET est pour les variables Shell.

134voto

Frank Thomas Points 33103

J'ai bien peur que ce ne soit pas aussi 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 lorsque l'on compare les verbes.

set modifie les valeurs d'environnement du Shell actuel (de la fenêtre), et le changement est disponible immédiatement, mais il est temporaire. Le changement n'affectera pas les autres shells en cours d'exécution, et dès que vous fermez la Shell, la nouvelle valeur est perdue jusqu'à ce que vous exécutiez à nouveau set.

setx modifie la valeur de façon permanente, ce qui affecte tous les shells futurs, mais ne modifie pas l'environnement des shells déjà en cours d'exécution. Vous devez quitter le Shell et le rouvrir avant que la modification 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

18voto

Premraj Points 1846

En fait, nous pouvons définir une variable à trois niveaux :
1. Shell
2. Utilisateur
3. Système (machine) ou global

SET : Créer ou mettre à jour la portée actuelle de Shell pour le 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 de l'utilisateur en permanence.

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 l'interface graphique, les variables d'environnement de l'utilisateur et du système.

enter image description here

17voto

Renju Jose Points 191

J'ajoute un point qui n'a pas été abordé par les autres répondants.

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

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

Sans le /m il modifiera ou créera uniquement une variable de chemin d'accès de niveau utilisateur.

Extrait du manuel de l'utilisateur de setx,

/M Spécifie que la variable doit être définie en dans l'ensemble du système (HKEY_LOCAL_MACHINE). environnement. La valeur par défaut est de définir la variable dans l'environnement HKEY_CURRENT_USER. de l'utilisateur.

3voto

Lewis Kelsey Points 394

setx.exe est un programme qui définit les variables d'environnement de l'utilisateur/du système dans le fichier registre qui est utilisé pour la création de processus futurs. set est une commande qui montre le processus les variables d'environnement dans le bloc de paramètres du PEB du processus en cours (qui affichent les variables utilisateur et système ainsi que les variables définies par le processus en cours ou le processus parent en utilisant set ), ainsi que de permettre à plus de variables d'y être définies par le processus actuel, et les changements de l'environnement peuvent être visualisés depuis l'explorateur de processus.

cmd /c set variable=value va définir des variables pour le processus enfant cmd.exe qu'il crée (qui s'attache au parent cmd.exe et n'alloue pas sa propre fenêtre de console, et hérite de l'environnement du parent), de sorte qu'il ne prendra pas effet lorsque vous exécuterez set après cela dans la même fenêtre, parce qu'il se réfère au processus parent. cmd.exe . Les processus de niveau supérieur héritent leur environnement directement du registre et de l explorer.exe met dynamiquement à jour ses variables d'environnement (contrairement à la plupart des autres applications), donc lorsque vous setx il ne mettra même pas à jour l'environnement du processus en cours, mais seulement le registre, qui est soit lu par l'utilisateur, soit modifié par l'utilisateur. explorer.exe ou le explorer.exe est mis à jour par la fonction de l'API Windows qui définit la variable d'environnement (moins probable), de sorte que les futures ouvertures du processus cmd.exe s héritent explorer.exe L'environnement de l'enfant, car il s'agit d'un enfant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X