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

Ce que je dois faire:

  • Ajoutez un dossier à la variable d'environnement %PATH% au niveau SYSTEM.
  • Faire le changement permanent.

Comment je dois le faire:

  • À l'aide de l'invite de commandes ou d'une autre méthode par laquelle toutes les commandes nécessaires peuvent être écrites sur un fichier .BAT .
  • En utilisant uniquement les outils qui seraient disponibles sur une installation nue de Windows XP SP3, sans connexion Internet.
  • Je préfère exécuter le script localement, mais j'ai aussi un accès à distance aux systèmes cibles. N'oubliez pas que je ne peux pas présumer de services non par défaut (c'est-à-dire: Registre à distance) sont activés sur les systèmes.

Systèmes sur lesquels le script doit fonctionner:

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

Je connais bien la commande SET , mais je suis également conscient qu'il remplacera généralement la variable existante au lieu de l'ajouter. Ce n'est pas acceptable. Existe-t-il un autre outil (ou une option pour SET , dont je ne suis pas au courant) qui ajoutera à la variable à la place? Ou, dois-je mettre un travail dans le script qui comprend temporairement la copie de la variable existante dans une autre variable ou un fichier texte?

En outre, je crois comprendre que SET ne modifiera pas définitivement la variable. J'ai vu mention de SETX , mais cela ne semble pas être intégré à Windows XP SP3 (ou, au moins, il ne semble pas être disponible sur le système sur lequel je travaille). Existe-t-il une autre façon de rendre le changement permanent, via l'édition de registre ou quelque chose comme ça?

J'ai fait quelques recherches autour de moi et j'ai appris un peu de là pour définir 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 en existe un, faites-le moi savoir.

Ce qui suit ajoute 'C: \ bin' à votre chemin, puis enregistre le nouveau chemin 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é que cela sur XP SP3, mais il devrait également fonctionner sur une version plus récente.

Je suppose qu'un nouvel utilisateur qui se connecte avant que la machine ne redémarre ne génère peut-être le nouveau chemin.

Harry a raison de son commentaire sur% SystemRoot%, si vous voulez les conserver, vous devez d'abord tirer l'ancienne valeur du chemin d'accès 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. ) 
 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