Comment puis-je ajouter définitivement une entrée dans la variable PATH du système, via la ligne de commande?

13

Ce que je dois faire:

  • Ajoutez un dossier à la %PATH%variable d'environnement au niveau SYSTÈME.
  • Rendez le changement permanent.

Comment je dois le faire:

  • À l'aide de l'invite de commandes ou d'une autre méthode permettant d' écrire toutes les commandes nécessaires dans un .BATfichier.
  • Utiliser uniquement des outils qui seraient disponibles sur une simple installation de Windows XP SP3, sans connectivité Internet.
  • Je préfère exécuter le script localement, mais j'ai également un accès à distance aux systèmes cibles. Gardez à l'esprit cependant que je ne peux pas présumer que des services autres que ceux par défaut (par exemple: Registre distant) sont activés sur les systèmes.

Systèmes sur lesquels le script doit travailler:

  • Windows XP SP3
  • Windows Server 2003 SP2
  • Windows 7 SP1
  • Windows Server 2008 R2 SP1

Je suis assez familier avec la SETcommande, mais je suis également conscient qu'elle remplacera généralement la variable existante au lieu de s'y ajouter. Ce n'est pas acceptable. Existe-t-il un autre outil (ou option pour SETlequel je ne suis pas au courant) qui s'ajoutera à la variable à la place? Ou, dois-je mettre une solution de contournement dans le script qui inclut la copie temporaire de la variable existante dans une autre variable ou un fichier texte?

Aussi, c'est ma compréhension qui SETne modifiera pas définitivement la variable. J'en ai vu parler SETX, mais cela ne semble pas être intégré à Windows XP SP3 (ou, du moins, il ne semble pas être disponible sur le système sur lequel je travaille). Existe-t-il un autre moyen de rendre le changement permanent, via la modification du registre ou quelque chose?

J'ai fait quelques recherches et j'ai appris un bon bout d'ici sur la définition des variables d'environnement dans Windows. Cependant, je n'ai pas encore trouvé de question exacte en double qui répondra à mes besoins. S'il y en a un, faites-le moi savoir.

Iszi
la source
Setx n'est pas fourni avec XP. Il se trouve dans un ou plusieurs des kits de ressources, mais j'oublie lequel. Pour apporter des modifications permanentes aux variables d'environnement sur la ligne de commande, c'est certainement le moyen le plus simple. Vous pouvez effectuer la modification dans le Registre (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment) mais les modifications du Registre à partir de la ligne de commande ne sont pas non plus un jeu d'enfant. Si j'étais vous, j'écrirais un VBScript pour ce faire.
EBGreen
@EBGreen Je suis un peu familier avec les REGmodifications du registre. Si vous souhaitez publier cela en tant que réponse, avec des suggestions sur la façon de conserver le chemin existant, je lui donnerais au moins un vote positif.
Iszi
1
Je pense, selon la suggestion d'EBGreen, que j'ai compris comment je dois le faire. Maintenant, je souhaite juste qu'il y ait un moyen de forcer l'actualisation du registre (et de pousser vers les variables d'environnement) sans redémarrer ou recharger Explorer?
Iszi
1
@EBGreen Oui, c'est à ça que ça ressemble. Soit dit en passant, si vous avez le temps de comprendre la syntaxe, pourriez-vous s'il vous plaît poster une réponse réelle? Je préfère que cela ne se transforme pas en une question à réponse automatique.
Iszi
1
@lszi, vous devez répondre à votre propre question. Une bonne réponse à une bonne question est à la fois utile, même lorsque vous y répondez vous-même.
Myrddin Emrys

Réponses:

4

Ce qui suit ajoute «C: \ bin» à votre chemin d'accès, puis enregistre le nouveau chemin d'accès dans le Registre:

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

Je n'ai testé cela que sur XP SP3, mais cela devrait également fonctionner sur une version plus récente.

Je suppose qu'un nouvel utilisateur qui se connecte avant le redémarrage de la machine peut ne pas obtenir le nouveau chemin.

Harry a raison avec son commentaire sur% SystemRoot%, si vous voulez les conserver, vous devez d'abord extraire l'ancienne valeur du chemin du registre:

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)
Peter Hahndorf
la source
2
N'oubliez pas que cela modifiera certaines des entrées PATH existantes en développant les références des variables d'environnement. Par exemple, l'entrée standard% SystemRoot% \ system32 sera remplacée par c: \ windows \ system32. Cet exemple particulier n'a pas d'importance car SystemRoot est une constante, mais si quelqu'un a configuré un PATH avec une référence à une variable d'environnement qui change, vous le casserez. (Je le fais sur certains de mes ordinateurs pour pointer vers le répertoire bin dans le Sun JDK actuel.)
Harry Johnston
Le nouveau script ne fonctionne pas tel qu'il est écrit si le chemin contient des crochets, par exemple, des références à Program Files (x86).
Harry Johnston
-1
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f
anon
la source
2
Bien que les commandes nues puissent être utiles, nous nous attendons à un peu plus de travail dans nos questions / réponses. Veuillez expliquer comment cela répond à la question des PO.
Ƭᴇcʜιᴇ007