113 votes

Comment ajouter une variable à la variable PATH de Windows en utilisant setx? Avoir des problèmes étranges

Je veux modifier la variable PATH de Windows en utilisant setx. Le suivant fonctionne au moins 50% du temps sur Windows 8:

setx PATH %PATH%;C:\Python27\;C:\Python27\Scripts\

Si cela donne l'erreur "l'argument par défaut ne peut être utilisé que 2 fois", alors le suivant fonctionne parfois:

setx PATH "%PATH%;C:\Python27\;C:\Python27\Scripts\"

La différence est que nous avons enveloppé le second argument entre guillemets. Je crois que les guillemets sont nécessaires lorsque %PATH% se développe pour inclure des espaces.

Cependant, j'ai rencontré quelques problèmes étranges sur Windows 7. Sur une machine Windows 7 particulière, j'ai eu ce problème:

echo %PATH%

Ça affiche:

C:\Foo\;C:\Bar\;[...beaucoup de chose...]C:\Baz\

Ensuite je fais ça:

setx PATH "%PATH%;C:\Quux\"

Ensuite il dit "Erreur: Tronqué à 1,024 caractères." Maintenant vérifions ce que contient PATH:

echo %PATH%

Ça affiche:

C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...beaucoup de choses, maintenant dupliquées...]C:\B

...et c'est coupé à 1,024 caractères. Il est dépassé à cause des duplications. Aussi intéressant: La valeur de PATH change malgré le fait que setx ait levé une erreur et n'a pas dit "Succès".

J'ai pu reproduire ce comportement étrange plusieurs fois (heureusement j'avais sauvegardé le contenu original de PATH).

À ce moment, la seule méthode sûre que je connais pour ajouter à PATH est la suivante:

  1. echo le PATH.

  2. Copier le contenu de PATH dans un fichier texte et ajouter manuellement ;C:\Python27\;C:\Python27\Scripts\ à la fin du PATH.

  3. Copier le tout hors du fichier texte.

  4. setx PATH ""

Ce processus fonctionne à chaque fois sur Windows 7 et Windows 8.

Je devrais vraiment être capable de faire cela en une seule commande. Qu'est-ce que je fais de travers?

95voto

Vituel Points 398

Exécutez cmd en tant qu'administrateur, puis :

setx /M PATH "%PATH%;"

L'option /M définit la variable à l'échelle SYSTEM. Le comportement par défaut est de le définir pour l'UTILISATEUR.

TL;DR

La troncature se produit car lorsque vous affichez %PATH%, vous obtenez la concaténation des valeurs SYSTEM et UTILISATEUR donc, lorsque vous l'ajoutez dans votre deuxième argument à setx, la commande essaiera de faire tenir le contenu à la fois de SYSTEM et de l'UTILISATEUR dans la variable UTILISATEUR. Lorsque vous affichez à nouveau, le résultat sera doublé.

L'option /M nécessite le privilège administrateur, vous devez donc ouvrir votre terminal avec "exécuter en tant qu'administrateur" sinon setx échouera avec "l'accès au chemin du registre est refusé".

Note : Vous ne verrez pas la nouvelle valeur lorsque vous affichez %PATH% juste après l'avoir définie de cette manière, vous devez fermer cmd et ouvrir à nouveau.

Si vous souhaitez vérifier les valeurs réelles stockées dans le registre, consultez cette question.

40voto

La variable d'environnement PATH est construite à partir d'une partie système et d'une partie spécifique à l'utilisateur qui sont toutes deux stockées dans le registre.

Les commandes suivantes veillent à ne pas interférer avec la partie système de PATH. Seule la partie spécifique à l'utilisateur est lue, modifiée et réécrite dans le registre.

for /f "usebackq tokens=2,*" %A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%B
setx PATH "C:\Python27;C:\Python27\Scripts;%my_user_path%"

La première commande récupère la partie spécifique à l'utilisateur de PATH depuis le registre dans une variable nommée my_user_path.

REMARQUE: Assurez-vous que la première commande fonctionne sans erreur

La deuxième commande ajoute C:\Python27;C:\Python27\Scripts; à la valeur de my_user_path et la réécrit dans la clé de registre spécifique à l'utilisateur pour PATH.

REMARQUE: Lorsqu'elle est utilisée dans un fichier .bat, remplacez % par %% à deux endroits de la première ligne :

for /f "usebackq tokens=2,*" %%A in (`reg query HKCU\Environment /v PATH`) do set my_user_path=%%B

Seuls les programmes nouvellement lancés verront le changement dans la variable d'environnement PATH.

8voto

NIK Points 699

Si quelqu'un veut l'exécuter dans PowerShell, cela fonctionne de la manière suivante :

Exécutez PowerShell en tant qu'administrateur

Ensuite

setx /M PATH "$Env:PATH;"

Pour vérifier, ouvrez un autre Powershell et affichez le CHEMIN comme ci-dessous,

$Env:PATH

4voto

Ehtesh Choudhury Points 1395

Si vous n'êtes pas lié à setx, vous pouvez utiliser un outil en ligne de commande alternatif comme pathed. Il existe une liste plus complète d'éditeurs de PATH alternatifs sur https://superuser.com/questions/297947/is-there-a-convenient-way-to-edit-path-in-windows-7/655712#655712

Vous pouvez également éditer directement la valeur du registre, c'est ce que fait setx. Plus d'informations dans cette réponse.

Il est étrange que votre %PATH% soit tronqué à 1024 caractères. Je pensais que setx n'avait pas ce problème. Cependant, vous devriez probablement nettoyer les entrées de chemin non valides.

4voto

Sans droits d'administration, la seule manière qui a fonctionné pour moi est un fichier bat qui contient le code suivant:

for /F "tokens=2* delims= " %%f IN ('reg query HKCU\Environment /v PATH ^| findstr /i path') do set OLD_SYSTEM_PATH=%%g
setx PATH "%USERPROFILE%\wev-tools;%OLD_SYSTEM_PATH%"

Le code est la combinaison des réponses https://stackoverflow.com/a/45566845/4717152 et https://stackoverflow.com/a/10292113/4717152

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X