web-dev-qa-db-fra.com

Comment puis-je ajouter à la variable Windows PATH en utilisant setx? Avoir des problèmes étranges

Je souhaite modifier la variable Windows PATH à l'aide de setx. Ce qui suit fonctionne au moins 50% du temps sous 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 ce qui suit fonctionne de temps en temps:

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

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

Cependant, j'ai rencontré des problèmes étranges sous Windows 7. Sur un ordinateur Windows 7 en particulier, j'ai eu ce problème:

echo %PATH%

Il imprime:

C:\Foo\;C:\Bar\;[...lots of stuff...]C:\Baz\

Puis je fais ceci:

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

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

echo %PATH%

Il imprime:

C:\Foo\;C:\Foo\;C:\Bar\;C:\Bar\;[...lots of stuff, now duplicated...]C:\B

... et est coupé à 1.024 caractères. Il a couru à cause des doublons. Également intéressant: la valeur de PATH change malgré le fait que setx a généré une erreur et n’a pas dit "Success".

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

Pour le moment, le seul moyen sûr que je sache d’ajouter au PATH est le suivant:

  1. echo the PATH.

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

  3. Copiez le tout hors du fichier texte.

  4. setx PATH "<paste the string here>"

Ce processus fonctionne chaque fois sous Windows 7 et Windows 8.

Je devrais vraiment pouvoir le faire en une seule commande. Qu'est-ce que je fais mal?

Je vous remercie.

58
SerMetAla

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

setx /M PATH "%PATH%;<your-new-path>"

L'option/M définit la variable sur la portée SYSTEM. Le comportement par défaut consiste à le définir pour USER.

TL; DR

Le problème de la troncature se produit car, lorsque vous appelez% PATH%, il affiche la concaténation des valeurs SYSTEM et USER. Ainsi, lorsque vous l'ajouterez à setx dans votre deuxième argument, il ajustera les valeurs SYSTEM et USER dans la variable USER. Lorsque vous répétez votre écho, les choses seront doublées.

De plus, l'option/M nécessite des privilèges d'administrateur. Vous devez donc ouvrir votre terminal avec "exécuter en tant qu'administrateur", sinon setx se plaindra avec "l'accès au registre est refusé".

Dernière chose à noter: vous ne verrez pas la nouvelle valeur si vous faites écho à% PATH% juste après l'avoir définie de cette façon, vous devez fermer cmd et rouvrir.

Si vous souhaitez vérifier les valeurs réelles stockées dans la base de registre, vérifiez cette question .

63
Vituel

Cela fonctionne parfaitement:

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 1ère commande récupère la variable d’environnement USER 'PATH' dans la variable 'my_user_path' La 2ème ligne ajoute le caractère 'C:\Python27; C:\Python27\Scripts;' à la variable d'environnement USER 'PATH'

6

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

Vous pouvez également modifier directement la valeur de registre, comme le fait setx. Plus 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. Bien que vous deviez probablement nettoyer les entrées de chemins invalides.

4
Ehtesh Choudhury

Je faisais face aux mêmes problèmes et j'ai trouvé une solution facile maintenant.

Utiliser pathman.

pathman /as %M2%

Ajoute par exemple% M2% au chemin du système. Rien de plus et rien de moins. Plus de problèmes pour obtenir un mélange de l'utilisateur PATH et du système PATH. Plus besoin d'essayer d'obtenir les valeurs correctes du registre ...

Essayé à Windows 10

3
Shivan

Sans droits d'administrateur, le seul moyen qui fonctionne 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

2
Andreas M. Oberheim

J'avais tellement de difficulté à gérer mes laboratoires d'informatique lorsque la variable d'environnement% PATH% a approché 1024 caractères pour lesquels j'ai écrit un script Powershell afin de le corriger.

Vous pouvez télécharger le code ici: https://gallery.technet.Microsoft.com/scriptcenter/Edit-and-shorten-PATH-37ef3189

Vous pouvez également l'utiliser comme moyen simple d'ajouter, de supprimer et d'analyser des entrées PATH en toute sécurité. Prendre plaisir.

0
Carl Bennett

Étapes: 1. / Ouvrez une invite de commande avec les droits de l'administrateur.

Étapes: 2. Exécutez la commande: setx/M PATH "chemin\vers;% PATH%"

[Remarque: veillez à modifier la commande afin que le chemin\reflète le chemin du dossier depuis votre racine.]

Exemple : setx/M PATH "C:\Program Files;% PATH%"

0
Raj Tukadiya

Si quelqu'un veut l'exécuter dans PowerShell, il fonctionne comme ci-dessous,

Exécuter Powershell en tant qu'administrateur 

Ensuite

setx /M PATH "$Env:PATH;<path to add>"

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

$Env:PATH
0
NIK