Définition ou modification d'une variable d'environnement (à l'échelle du système) dans cmd.exe

13

Je cherche un moyen pratique d'ajouter et / ou de modifier et / ou de supprimer une variable d'environnement de la ligne de commande. En particulier, je me retrouve parfois dans des situations où je dois ajouter quelques variables dans cmd.exe.

Je serais reconnaissant si quelqu'un me montrait un moyen non graphique pour modifier (c'est-à-dire: ajouter un nouveau répertoire) à la %PATH%variable.

Le changement doit être permanent, pas seulement pour la durée de la cmdsession.

René Nyffenegger
la source
1
Je pense que l' un problème , vous trouverez que la plupart des changements aux permanents , l' ensemble du système des variables d'environnement nécessitent une déconnexion / login (ou reboot) pour la session de l'utilisateur d'utiliser les valeurs modifiées.
Quack Quichotte

Réponses:

8

La méthode Old School de manipuler directement les variables de registre avec la commande reg était rentable. Voici comment procéder:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

Jetez cela dans un script d'une ligne appelé apath.bat qui ressemble à ceci:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

Ensuite, tout ce que vous devez fournir est le chemin du nouveau répertoire que vous ajoutez lors de l'appel du script et vous êtes composé:

par exemple: apath.bat% addonpath%

Bien que Hinch ait raison. La meilleure façon de le faire si vous utilisez Vista ou supérieur est d'utiliser la commande SETX qui est conçue pour nous permettre de propager des variables d'environnement sans risque de manipuler directement le registre avec la commande reg qui pourrait vous sauver votre machine si vous manipulez suffisamment de variables ENV pour l'utiliser à la volée.

user51259
la source
Cette commande nécessite-t-elle un redémarrage?
Juzer Ali
Non, mais vous devez utiliser un nouveau processus (cmd).
Mike
1
Pour moi, il faut redémarrer? Pourquoi? Je suis sous Windows XP, sp3.
Changwang Zhang
15

Vous pouvez utiliser setx.

Variable utilisateur:

SETX PATH "%PATH%;C:\MyDir"

Variable système:

SETX PATH "%PATH%;C:\MyDir" /M
Gaffe
la source
Je crois que SETX est disponible depuis Vista, mais je suis sous XP.
René Nyffenegger
vous pourrez peut-être vous en sortir en copiant setx.exe à partir d'une machine Vista. ne fonctionnera probablement pas, mais cela pourrait.
Quack Quichote
2
SETX fait partie des outils de ressources pour Windows Server 2003. Vous pouvez simplement l'ajouter à votre répertoire system32, ou tout autre ajouté à votre chemin (poulet-œuf!).
paradroid
J'ai besoin de la partie / M pour pouvoir modifier la variable système, pas celle utilisateur. Merci!
Andrei Sfat
Les deux commandes spécifiées sont incorrectes. Pourquoi? Windows conserve en fait deux valeurs PATH: à l'échelle du système et par utilisateur. Lorsque vous tapez echo %PATH%, vous les voyez combinés, comme <system path>;<user path>. Ainsi, la première commande forcera les éléments actuels du chemin système à apparaître dans le chemin utilisateur (ce qui n'est pas si mal), tandis que la seconde commande fera apparaître les éléments actuels du chemin utilisateur dans le chemin système (ce qui est inacceptable).
Sasha
1

Vous pouvez utiliser la HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunclé de registre pour pointer vers un fichier de commandes, pour vous permettre d'apporter des modifications semi-permanentes sans plonger dans les boîtes de dialogue des paramètres obscurs.

Phoshi
la source
Pour autant que je sache, cela n'influencerait que les invocations ultérieures de cmd.exe (sans l'indicateur / d), mais pas l'ensemble du système ou d'autres processus (ultérieurement appelés).
René Nyffenegger
C'est exact. Je trouve qu'un avantage signifie que vous pouvez en faire plus sans vous soucier des différents processus ne sachant pas quoi faire. Cela fonctionnera cependant dans n'importe quelle invite interactive, ce qui est toujours agréable: P
Phoshi
1

Si vous ne souhaitez pas utiliser l'interface graphique (comme dans le Panneau de configuration, Système, Avancé, Variables d'environnement, PATH), vous pouvez probablement utiliser REGpour définir HKCU\Environment\PATH.

  • mise à jour %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

Les /fforces écrasent la valeur existante afin que vous n'ayez pas à répondre de manière interactive à la question.

Modifier: %PATH% doit être cité.

Edit: Il convient également de noter que cela nécessite probablement un redémarrage ou une reconnexion avant d'entrer en vigueur. Tout changement dans l'interface graphique prend effet immédiatement (pour les nouvelles cmd.exesessions).

Référence: http://support.microsoft.com/kb/104011

Comme indiqué dans la référence, si vous souhaitez écrire du code, vous pouvez envoyer WM_SETTINGCHANGE et cela devrait éviter l'exigence de connexion / déconnexion.

opello
la source
ce serait très utile. Mais, si je recherche sur cette variable, elle ne renvoie rien.
PA.
Hrm. Sur XP Pro SP3 anglais j'obtenir mon chemin avec: REG QUERY HKCU\Environment /v PATH.
opello
c'est un chemin spécifique à l'utilisateur, pas le chemin à l'échelle du système. Je ne sais pas où celui-là habite. ils peuvent être définis sur la même chose mais contiennent généralement des choses distinctes (et votre chemin de travail est une fusion des deux).
Quack Quichotte
C'est à HKCU. L'article Microsoft KB lié contient les deux emplacements de registre.
opello
1
C'est presque ce que je recherche ... s'il y avait un moyen d'envoyer également le WM_SETTINGCHANGE à partir de cmd.exe.
René Nyffenegger
0

Il est facile de modifier le chemin d'accès dans le processus cmd.exe actuel:

PATH c:\MyNewDirectory;%PATH%

Vous pouvez toujours faire HELP PATH pour obtenir de l'aide sur la commande PATH.

jdigital
la source
1
N'est-ce pas seulement bon pour la session?
JL.
oui, cela ne persiste pas entre les sessions.
John T
JL a raison et je cherchais une solution permanente. J'ai modifié ma question en conséquence.
René Nyffenegger
0

Pour des changements véritablement permanents à l'échelle du système, vous voulez vraiment utiliser le panneau de configuration Système (alias Poste de travail -> Propriétés -> Avancé -> Variables d'environnement, pour WinXP). Les paramètres y affectent l'ensemble de votre système, y compris les programmes GUI dans le shell Explorer.

Si vous n'avez besoin que de ces modifications dans le cmd.exeshell, vous pouvez exécuter un fichier de commandes qui les définit chaque fois que vous démarrez une fenêtre cmd.exe. La réponse de Phoshi mentionne le HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, qui semble être une excellente option - facile à faire de petites modifications et réexécutez à partir de la ligne de commande si vous en avez besoin. Mais cela n'affectera pas les fenêtres GUI ou le shell Explorer.

Je suis en fait surpris que Sysinternals ne dispose pas d'un utilitaire capable de le faire. Peut-être qu'un autre des PStools peut le faire?

Quack Quichotte
la source
0

Beaucoup de façons de le faire. REG ADD est un ou REG IMPORT (en utilisant un fichier .REG exporté à partir d'un autre ordinateur). SETX / M en est un autre. Vous pouvez également le pousser à l'aide des préférences de stratégie de groupe (le moyen le plus simple pour un grand nombre d'ordinateurs)

Skatterbrainz
la source
0

Une autre pensée non mentionnée ici, créer un script autohotkey qui lancera le panneau de contrôle et l'entrera pour vous. Cela fonctionne bien si vous êtes déjà un utilisateur AHK :-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

Qu'en est-il également de la modification de hklm / system / currentcontrolset001 / control / session manager / environment: path key? Mais la même clé se trouve sous hklm / system / currentcontrolset002 et hklm / system / currentcontrolset. Il semble que cela pourrait être correct, par ici: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

Justin Goldberg
la source