Ajout d'un répertoire à la variable d'environnement PATH sous Windows

526

J'essaie d'ajouter C:\xampp\phpà ma PATHvariable d'environnement système dans Windows.

Je l'ai déjà ajouté à l'aide de la boîte de dialogue Variables d'environnement.

Mais quand je tape dans ma console:

C:\>path

il n'affiche pas le nouveau C:\xampp\phprépertoire:

PATH=D:\Program Files\Autodesk\Maya2008\bin;C:\Ruby192\bin;C:\WINDOWS\system32;C:\WINDOWS;
C:\WINDOWS\System32\Wbem;C:\PROGRA~1\DISKEE~2\DISKEE~1\;c:\Program Files\Microsoft SQL
Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;D:\Program Files\TortoiseSVN\bin
;D:\Program Files\Bazaar;C:\Program Files\Android\android-sdk\tools;D:\Program Files\
Microsoft Visual Studio\Common\Tools\WinNT;D:\Program Files\Microsoft Visual Studio\Common
\MSDev98\Bin;D:\Program Files\Microsoft Visual Studio\Common\Tools;D:\Program Files\
Microsoft Visual Studio\VC98\bin

J'ai deux questions:

  1. Pourquoi est-ce arrivé? Y a-t-il quelque chose que j'ai fait de mal?
  2. De plus, comment ajouter des répertoires à ma PATHvariable à l'aide de la console (et par programme, avec un fichier de commandes)?
Netorica
la source
43
C'est sur le sujet parce que c'est une question sur «les outils que les programmeurs utilisent couramment». Si vous développez sous Windows et que vous n'avez jamais eu besoin de modifier le CHEMIN, je suis surpris. Pour assouvir le désir d'être lié à la programmation, j'ai souligné ce que la réponse la plus votée a souligné: vous pouvez le faire par programme via la console (ou via un fichier batch).
George Stocker
1
merci pour l'examen @GeorgeStocker bien ouais je l'ai fait par programme et mais je n'ai juste pas eu une idée que je dois me reconnecter après avoir appliqué des changements dans la session de console. (et je pense que ce n'est que dans mon cas) mais la réponse la plus votée répond généralement à la question
Netorica
1
@George - d'accord, mais en l'état, cette question est écrite pour Super User, et non Stack Overflow. Super User fournira de l'aide sur les configurations de serveur Web pour un usage personnel. Stack Overflow est destiné aux questions de programmation.
2014
1
Quittez et ouvrez une nouvelle console ... Si vous utilisez bash, cela peut nécessiter un redémarrage du système avant que les modifications ne persistent, selon la façon / ce que vous utilisez ,.
Tracker1

Réponses:

148

Cela modifie uniquement le registre. Un processus existant n'utilisera pas ces valeurs. Un nouveau processus le fera s'il est démarré après cette modification et n'hérite pas de l'ancien environnement de son parent.

Vous n'avez pas spécifié comment vous avez démarré la session de console. Le meilleur moyen de garantir cela est de quitter le shell de commande et de le réexécuter. Il devrait ensuite hériter du PATH mis à jour.

Hans Passant
la source
9
Hmm, non, ça ne fait vraiment que modifier le registre. Cela devrait être un peu évident en faisant cela dans une boîte de dialogue du Panneau de configuration au lieu, disons, de l'invite de commande avec la commande PATH. Vous pouvez observer ce qu'il fait facilement avec Process Monitor de SysInternals, si vous le souhaitez. L'utilisation de PATH n'est pas la même, toutes les modifications apportées seront perdues à la fermeture de la console. SETX est un moyen d'apporter des modifications persistantes, comme la boîte de dialogue.
Hans Passant du
3
C'est correct. Vous devez toujours redémarrer votre session de console avant de récupérer de nouvelles variables d'environnement.
BrainSlugs83
1
La session de console WM_SETTINGCHANGEmettrait-elle à jour les variables si un message était envoyé depuis une application? stackoverflow.com/a/8358361
John_West
Il est théoriquement possible, aucune implémentation CRT pratique que je sache ne le fait réellement. Explorer le fait.
Hans Passant
1
Informations de base corroborant cela: blogs.msdn.microsoft.com/oldnewthing/20150915-00/?p=91591
Euro Micelli
961

Option 1

Après avoir modifié PATHl'interface graphique, fermez et rouvrez la fenêtre de la console.

Cela fonctionne car seuls les programmes démarrés après la modification verront le nouveau PATH.

Option 2

Exécutez cette commande dans la fenêtre de commande que vous avez ouverte:

set PATH=%PATH%;C:\your\path\here\

Cette commande s'ajoute C:\your\path\here\au courant PATH.

Décomposer:

  • set- Une commande qui modifie les variables d'environnement de cmd uniquement pour la session cmd actuelle ; les autres programmes et le système ne sont pas affectés.
  • PATH=- Signifie qu'il PATHs'agit de la variable d'environnement à modifier temporairement.
  • %PATH%;C:\your\path\here\- La %PATH%pièce se développe à la valeur actuelle de PATH, puis y ;C:\your\path\here\est concaténée. Cela devient le nouveau PATH.
JimR
la source
16
@Ilya: Je voulais que vous ouvriez la fenêtre de la console après que le chemin a été modifié dans MyComputer-> Properties-> Advanced-> Env Variables-> Path. Certaines applications Windows propageront les modifications des variables d'environnement après leur démarrage et d'autres non. WinXP cmd.exe ne fonctionne pas.
JimR
7
si je quitte la console et que je relance, je dois réinitialiser le chemin. Une idée de comment rendre ce changement permanent?
David 天宇 Wong
2
@David 天宇 Wong Si vous suivez "Poste de travail"> "Propriétés"> "Avancé"> "Variables d'environnement"> "Chemin d'accès". et ajoutez le répertoire à la fin de cette chaîne, il restera. Assurez-vous simplement d'ouvrir la console après avoir effectué la modification.
theB3RV
yup @ theB3RV, c'est juste un long chemin pour faire quelque chose de simple. C'est bizarre qu'il n'y ait pas de commande persistante qui puisse être tapée dans la console
David 天宇 Wong
12
@David 天宇 Wong Je viens de découvrir que "SETX est un moyen d'apporter des modifications persistantes, comme la boîte de dialogue". donc la commande SETX devrait le faire
theB3RV
202

AVERTISSEMENT: cette solution peut être destructrice pour votre CHEMIN et la stabilité de votre système. En tant qu'effet secondaire, il fusionnera votre chemin utilisateur et système et tronquera le chemin à 1024 caractères. L'effet de cette commande est irréversible. Faites d'abord une sauvegarde de PATH. Voir les commentaires pour plus d'informations.

Ne copiez-collez pas aveuglément cela. Utiliser avec précaution.

Vous pouvez ajouter définitivement un chemin d'accès à l' PATHaide de la setxcommande:

setx /M path "%path%;C:\your\path\here\"

Supprimez l' /Mindicateur si vous souhaitez définir l'utilisateur PATHau lieu du système PATH.

Remarques:

  • La setxcommande est uniquement disponible dans Windows 7 et versions ultérieures.
  • Vous devez exécuter cette commande à partir d'une invite de commandes élevée.

  • Si vous souhaitez uniquement le modifier pour la session en cours, utilisez set .

Nafscript
la source
7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"définir la valeur PATH au niveau de la machine
Lu55
7
Pourquoi n'est-ce pas la réponse acceptée? J'imagine que la plupart des gens voudraient définir leur chemin de façon permanente ...
Peter Gordon
9
AVERTISSEMENT : en raison de l'utilisation de %PATH%variable, cette commande fusionne les variables env globales avec celles des utilisateurs. N'est-ce pas? Cela peut créer des effets secondaires indésirables, en particulier avec le commutateur / M
FF_Dev
4
AVERTISSEMENT 2: La %PATH%variable peut ne pas être synchronisée avec les variables d'environnement car elle est chargée au lancement de l'invite de commande et jamais rechargée par la suite (même lors de l'exécution de la commande setx). Il aurait également pu être modifié localement par des scripts précédemment exécutés.
FF_Dev
66

Vous n'avez besoin d'aucune commande setou setx, ouvrez simplement le terminal et tapez:

PATH

Cela montre la valeur actuelle de la variable PATH. Maintenant, vous voulez y ajouter un répertoire? Tapez simplement:

PATH %PATH%;C:\xampp\php

Si, pour une raison quelconque, vous souhaitez effacer la variable PATH (aucun chemin d'accès ou supprimer tous les chemins d'accès), tapez:

PATH ;

Mise à jour

Comme Danial Wilson l'a noté dans le commentaire ci-dessous, il définit le chemin uniquement dans la session en cours. Pour définir le chemin d'accès de manière permanente, setxmais soyez conscient, bien que cela définisse le chemin d'accès de façon permanente mais PAS dans la session en cours, vous devez donc démarrer une nouvelle ligne de commande pour voir les modifications, plus d'informations ici .

Pour vérifier si une variable d'environnement existe ou voir sa valeur, utilisez la commande ECHO:

echo %YOUR_ENV_VARIABLE%
zar
la source
1
Cela a fonctionné :) que diriez-vous de cela! «PATH% PATH%;» Je m'en souviens
Dustin Woodard
12
Je pense que cela ne fonctionne que pour l'instance de la session cmd, utilisez setx pour le changer définitivement
Daniel Wilson
2
N'incluez pas de guillemets avec cela. Par exemple, appelez PATH %PATH%;C:\Program Files\...au lieu dePATH "%PATH%;C:\Program Files\..."
icc97
4
N'utilisez pas setx! Vous risquez de tronquer votre variable de chemin, perdant de nombreux autres chemins que vous avez passé du temps à définir. Tenez compte des avertissements ci-dessus.
STWilson
1
@STWilson, trop tard pour voir votre commentaire!
West Yang
48

J'utiliserais plutôt PowerShell!

Pour ajouter un répertoire à PATH à l'aide de PowerShell, procédez comme suit:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path")

Pour définir la variable pour tous les utilisateurs, à l'échelle de la machine, la dernière ligne doit ressembler à:

[Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")

Dans un script PowerShell, vous voudrez peut-être vérifier la présence de votre C:\xampp\phpavant d'ajouter à PATH (au cas où il aurait été ajouté précédemment). Vous pouvez l'encapsuler au ifconditionnel.

Donc, tout mettre ensemble:

$PATH = [Environment]::GetEnvironmentVariable("PATH")
$xampp_path = "C:\xampp\php"
if( $PATH -notlike "*"+$xampp_path+"*" ){
    [Environment]::SetEnvironmentVariable("PATH", "$PATH;$xampp_path", "Machine")
}

Mieux encore, on pourrait créer une fonction générique. Fournissez simplement le répertoire que vous souhaitez ajouter:

function AddTo-Path{
param(
    [string]$Dir
)

    if( !(Test-Path $Dir) ){
        Write-warning "Supplied directory was not found!"
        return
    }
    $PATH = [Environment]::GetEnvironmentVariable("PATH")
    if( $PATH -notlike "*"+$Dir+"*" ){
        [Environment]::SetEnvironmentVariable("PATH", "$PATH;$Dir", "Machine")
    }
}

Vous pourriez améliorer les choses en faisant un peu de polissage. Par exemple, utiliser Test-Pathpour confirmer que votre répertoire existe réellement.

Ifedi Okonkwo
la source
3
pour appeler SetEnvironmentVariableavec le Machineparamètre dont vous avez besoin pour ouvrir le PowerShell avec des droits d'administrateur
InsOp
il est amèrement décevant que ce shell "power" ne reconnaisse pas% userprofile% ni $ userprofile .. mais là encore, ce sont les fenêtres dont nous parlons
abbood
3
@abbood Ce que vous cherchez, c'est $env:userprofile.
nyuszika7h
3
Vous devez également spécifier soit userou machinedans l'appel de GetEnvironmentVariable. Sinon, $PATHcontiendra la valeur de la partie utilisateur et machine du registre, ce qui fera exploser inutilement la variable de chemin lors du stockage.
René Nyffenegger
35

SETX plus sûr

Hochez la têteSETX à tous les commentaires sur la réponse initiale de @ Nafscript .

  • SETXpar défaut mettra à jour votre chemin utilisateur .
  • SETX ... /Mmettra à jour votre chemin système .
  • %PATH% contient le chemin système avec le chemin utilisateur ajouté

Avertissements

  1. Sauvegardez votrePATH - SETXtronquera vos fichiers indésirables de plus de 1024 caractères
  2. Ne pas appelerSETX %PATH%;xxx - ajoute le chemin du système dans le chemin de l'utilisateur
  3. Ne pas appelerSETX %PATH%;xxx /M - ajoute le chemin utilisateur dans le chemin système
  4. L'utilisation excessive de fichiers batch peut provoquer la cécité 1

La page ss64 SETX contient de très bons exemples. Surtout, il indique où se trouvent les clés de registre pour SETXvsSETX /M

Variables utilisateur:

HKCU\Environment

Variables système:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Instructions d'utilisation

Ajouter à l'utilisateur PATH

append_user_path.cmd

@ECHO OFF
REM usage: append_user_path "path"
SET Key="HKCU\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > user_path_bak.txt
SETX PATH "%CurrPath%";%1

Ajouter au système PATH

append_system_path.cmd. Doit être exécuté en tant qu'administrateur.

(c'est fondamentalement la même chose sauf avec un différent Keyet le SETX /Mmodificateur)

@ECHO OFF
REM usage: append_system_path "path"
SET Key="HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
FOR /F "usebackq tokens=2*" %%A IN (`REG QUERY %Key% /v PATH`) DO Set CurrPath=%%B
ECHO %CurrPath% > system_path_bak.txt
SETX PATH "%CurrPath%";%1 /M

Alternatives

Enfin, il existe potentiellement une version améliorée appelée SETENV recommandée par la page ss64 SETX qui divise la définition des variables d'environnement utilisateur ou système.


1. Pas strictement vrai

icc97
la source
24

Tard dans la soirée - mais pratique si vous êtes déjà dans le répertoire que vous souhaitez ajouter à PATH.

set PATH=%PATH%;%CD%

modifier: selon le commentaire - fonctionne avec les fenêtres standard cmd mais pas en PowerShell.

Pour PowerShell, l' %CD%équivalent est[System.Environment]::CurrentDirectory

nclord
la source
1
Mon Powershell dit que% CD% n'est pas reconnu.
Paulo Matos
@PauloMatos Pourrait essayer d'utiliser[System.Environment]::CurrentDirectory
nclord
4

Mis à part toutes les réponses, si vous voulez un bel outil GUI pour éditer vos variables d'environnement Windows, vous pouvez utiliser l'éditeur d'environnement rapide

essayez-le! son sûr à utiliser et génial!

http://www.rapidee.com/en/

Netorica
la source
2
Windows 10 a considérablement amélioré l'éditeur de variables d'environnement Path maintenant. Il ne leur a fallu que 20 ans pour y arriver.
icc97
4
  • les modifications de la ligne de commande ne seront pas permanentes, seront perdues à la fermeture de la console.
  • Le chemin fonctionne comme le premier arrivé, premier servi.
  • Vous pouvez vouloir remplacer d'autres exécutables déjà inclus. Par exemple, si vous avez déjà une autre version sur votre chemin et que vous souhaitez ajouter une version différente sans apporter de modification permanente sur le chemin, vous devez placer le répertoire au début de la commande.

Pour remplacer les exécutables déjà inclus;

définir PATH = C: \ xampp \ php;% PATH%;

hevi
la source
2

La vérification des suggestions ci-dessus sur Windows 10 LTSB, et avec un aperçu des contours "aide" (qui peuvent être consultés en tapant "commande /?" Sur la cmd), m'a amené à la conclusion que la commande PATH modifie la variable d'environnement système Valeurs de chemin uniquement pour la session en cours, mais après le redémarrage, toutes les valeurs sont réinitialisées à leur valeur par défaut, tout comme elles l'étaient avant d'utiliser la commande PATH.

D'un autre côté, l'utilisation de la commande SETX avec des privilèges administratifs est beaucoup plus puissante, elle modifie définitivement ces valeurs (ou au moins jusqu'à la prochaine utilisation de cette commande ou jusqu'à la prochaine manipulation manuelle de ces valeurs par l'interface graphique ...).

Mais pour plus de clarté, j'ai pensé que partager ici la meilleure utilisation de la syntaxe SETX qui fonctionnait pour moi pourrait aider quelqu'un un jour:

SETX PATH "%PATH%;C:\path\to\where\the\command\resides"

où tout signe égal '=' doit être évité, et ne vous inquiétez pas des espaces! il n'est pas nécessaire d'insérer plus de guillemets pour un chemin qui contient des espaces à l'intérieur - le signe de division ';' fait le travail.

Le mot clé PATH qui suit le SETX définit quel ensemble de valeurs doit être modifié parmi les valeurs possibles des variables d'environnement système, et le% PATH% (le mot PATH entouré par le signe de pourcentage) à l'intérieur des guillemets, indique au système d'exploitation de quitter l'existant PATH les valeurs telles qu'elles sont et ajoutez le chemin suivant (celui qui suit le signe de division «;») aux valeurs existantes.

HTH

such_ke_nasdeeq
la source
2

En ce qui concerne le point 2, j'utilise un simple fichier de commandes qui remplit PATHou d'autres variables d'environnement pour moi. Par conséquent, il n'y a pas de pollution des variables d'environnement par défaut. Ce fichier batch est accessible de partout donc je peux taper:

c:\>mybatchfile
-- here all env. are available
c:\>php file.php
Grzegorz Gajos
la source
Il s'agit d'une différence importante entre * nix-es et Windows. Le lot s'exécute dans le même shell et les modifications apportées à l'environnement restent après sa fermeture (au niveau de la session). Cependant, cela va dans les deux sens: un fichier de commandes peut effacer votre environnement. (BTW, sur * nix-es vous auriez juste à sourceun tel fichier, comme . mybatchfile).
Tomasz Gandor
Salut @ grzegorz-gajos, je cherchais exactement cela, votre lien pour plus de détails donne 404. Des alternatives?
devkabiir
Désolé, le contenu du lien n'est plus disponible. J'ai enlevé.
Grzegorz Gajos
1

Dans une invite de commande, vous dites à Cmd d'utiliser la ligne de commande de l'Explorateur en le faisant précéder de start.

Alors start Yourbatchname.

Notez que vous devez vous inscrire comme si son nom était batchfile.exe.

Les programmes et les documents peuvent être ajoutés au registre. Ainsi, en tapant leur nom sans leur chemin dans la boîte de dialogue ou le raccourci Démarrer - Exécuter, Windows peut les trouver.

Il s'agit d'un fichier reg générique. Copiez les lignes ci-dessous dans un nouveau document texte et enregistrez-le sous anyname.reg. Modifiez-le avec vos programmes ou documents.

Dans les chemins, utilisez \ pour séparer les noms de dossier dans les chemins de clé, car regedit utilise un seul \ pour séparer ses noms de clé. Tous les fichiers reg commencent par REGEDIT4. Un point-virgule transforme une ligne en commentaire. Le symbole @ signifie affecter la valeur à la clé plutôt qu'une valeur nommée.

Le fichier n'a pas besoin d'exister. Cela peut être utilisé pour définir Word.exe pour ouvrir Winword.exe.

La frappe start batchfiledémarre iexplore.exe.

REGEDIT4
;The bolded name below is the name of the document or program, <filename>.<file extension> 

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Batchfile.exe]

;The @ means the path to the file is assigned to the default value for the key.
;The whole path in enclosed in a quotation mark ".

@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\""

;Optional Parameters. The semicolon means don't process the line. Remove it if you want to put it in the registry

;Informs the shell that the program accepts URLs.

;"useURL"="1"

;Sets the path that a program will use as its' default directory. This is commented out.

;"Path"="C:\\Program Files\\Microsoft Office\\Office\\"

On vous a déjà parlé du chemin dans une autre réponse. Voir également doskey /?pour les macros cmd (elles ne fonctionnent que lors de la frappe).

Vous pouvez exécuter des commandes de démarrage pour CMD. À partir de la référence technique du Kit de ressources Windows

AutoRun

HKCU\Software\Microsoft\Command Processor 

Data type Range Default value 
REG_SZ  list of commands  There is no default value for this entry.  

La description

Contient des commandes qui sont exécutées à chaque démarrage de Cmd.exe.


la source
1

Une meilleure alternative au Panneau de configuration est d'utiliser ce programme gratuit de sourceforge appelé Pathenator:

https://sourceforge.net/projects/pathenator/

Cependant, il ne fonctionne que pour les systèmes dotés de Dot.Net 4.0 ou supérieur, tels que Windows 7,8 ou 10.

Bill Moore
la source
1

Si vous exécutez la commande cmd, elle mettra à jour toutes les variables système pour cette fenêtre de commande.

Pranav Sharma
la source
Dans un sens. Ce qui se passe, c'est que vous démarrez une nouvelle session dans la session en cours. Pour quitter, vous devrez appeler exitdeux fois, d'abord pour fermer le nouveau, puis pour fermer la première session (avec l'ancien environnement).
Farway
1

utiliser le chemin de gtools

il fait les choses de manière intuitive, par exemple:

pathed /REMOVE "c:\my\folder"
pathed /APPEND "c:\my\folder"

et montre des résultats sans avoir besoin de générer un nouveau cmd !

womd
la source
0
  1. J'ai installé PHP cette fois. Php-7 *** .zip extrait dans C: \ php \
  2. Sauvegardez ma variable d'environnement PATH actuelle: exécutez cmdet exécutez la commande:path >C:\path-backup.txt

  3. Récupère ma valeur de chemin actuelle dans le fichier C: \ path.txt (de la même manière)

  4. Modifier path.txt (bien sûr, ma longueur de chemin est supérieure à 1024 caractères, Windows fonctionne quelques années)
    • J'ai supprimé les chemins d'accès en double, comme «C: \ Windows; ou C: \ Windows \ System32; ou C: \ Windows \ System32 \ Wbem; - J'en ai deux fois.
    • Supprimez également les chemins des programmes désinstallés. Exemple: C: \ Program Files \ NonExistSoftware;
    • De cette façon, ma longueur de chaîne de chemin <1024 :)))
    • à la fin de la chaîne de chemin, ajoutez; C: \ php \
    • Copiez la valeur du chemin uniquement dans le tampon avec des guillemets doubles encadrés! Exemple: "C: \ Windows; ****; C: \ php \" Aucun CHEMIN = devrait être là !!!
  5. Ouvrez Windows PowerShell en tant qu'administrateur.
  6. Exécuter la commande:

setx path "Here you should insert string from buffer (new path value)"

  1. Relancez votre terminal (j'utilise "Far manager") et vérifiez: php -v
serbe
la source
0

Aussi trivial que cela puisse être, j'ai dû redémarrer Windows face à ce problème.

J'utilise Windows 7 x64. J'ai fait une mise à jour manuelle de la variable PATH du système. Cela a bien fonctionné si j'exécute cmd.exe à partir du menu stat. Mais si je tape "cmd" dans la barre d'adresse de l'Explorateur Windows, il semble charger le PATH d'ailleurs, qui n'a pas eu mes modifications manuelles.

(Pour éviter tout doute - oui, j'ai fermé et relancé cmd plusieurs fois avant de redémarrer et cela n'a pas aidé.)

svinec
la source