Ce que je dois faire:
%PATH%
au niveau SYSTEM. Comment je dois le faire:
.BAT
. Systèmes sur lesquels le script doit fonctionner:
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