Aggiunta di directory alla variabile d'ambiente PATH in Windows


526

Sto cercando di aggiungere C:\xampp\phpalla mia PATHvariabile di ambiente di sistema in Windows.

L'ho già aggiunto usando la finestra di dialogo Variabili d'ambiente.

Ma quando scrivo nella mia console:

C:\>path

non mostra la nuova C:\xampp\phpdirectory:

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

Ho due domande:

  1. Perché è successo? C'è qualcosa che ho fatto di sbagliato?
  2. Inoltre, come posso aggiungere directory alla mia PATHvariabile usando la console (e programmaticamente, con un file batch)?

43
Questo è in tema perché si tratta di "strumenti che i programmatori usano comunemente". Se sviluppi su Windows e non hai mai avuto bisogno di modificare il PERCORSO, sono sorpreso. Per saziare il desiderio di essere legato alla programmazione, ho messo in evidenza ciò che ha sottolineato la risposta più votata: puoi farlo programmaticamente tramite la console (o tramite un file batch).
George Stocker,

1
grazie per la recensione @GeorgeStocker bene sì, l'ho fatto a livello di programmazione e, ma non ho avuto idea di dover riconnettermi dopo aver applicato le modifiche nella sessione della console. (e penso che sia solo nel mio caso) ma la risposta più votata generalmente risponde alla domanda
Netorica

1
@George - d'accordo, ma così com'è, questa domanda è scritta per Super User e non Stack Overflow. Super User fornirà assistenza per le configurazioni del server Web per uso personale. Stack Overflow è per domande di programmazione.
JWW

1
Esci e apri una nuova console ... Se stai usando bash, potrebbe essere necessario riavviare il sistema prima che le modifiche persistano, a seconda di come / cosa stai usando.
Tracker 1,

Risposte:


148

Questo modifica solo il registro. Un processo esistente non utilizzerà questi valori. Un nuovo processo lo farà se viene avviato dopo questa modifica e non eredita il vecchio ambiente dal suo genitore.

Non hai specificato come hai avviato la sessione della console. Il modo migliore per assicurarsi che sia uscire dalla shell dei comandi ed eseguirlo di nuovo. Dovrebbe quindi ereditare il PERCORSO aggiornato.


9
Hmm, no, in realtà modifica solo il registro. Dovrebbe essere un po 'ovvio farlo in una finestra di dialogo del Pannello di controllo anziché, ad esempio, nel prompt dei comandi con il comando PATH. Se ti interessa, puoi osservare cosa fa facilmente con Process Monitor di SysInternals. L'uso di PATH non è lo stesso, eventuali modifiche apportate andranno perse alla chiusura della console. SETX è un modo per apportare modifiche permanenti, come la finestra di dialogo.
Hans Passant,

3
Questo è corretto. Devi sempre riavviare la sessione della console prima che raccolga nuove variabili di ambiente.
BrainSlugs83

1
La sessione della console aggiornerebbe le variabili se il WM_SETTINGCHANGEmessaggio fosse inviato da un'applicazione? stackoverflow.com/a/8358361
John_West

È teoricamente possibile, nessuna implementazione pratica di CRT che conosco effettivamente lo fa. Explorer lo fa.
Hans Passant,

1
Informazioni di base a conferma di questo: blogs.msdn.microsoft.com/oldnewthing/20150915-00/?p=91591
Euro Micelli,

961

opzione 1

Dopo aver modificato PATHcon la GUI, chiudere e riaprire la finestra della console.

Questo funziona perché solo i programmi avviati dopo la modifica vedranno il nuovo PATH.

opzione 2

Esegui questo comando nella finestra di comando che hai aperto:

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

Questo comando si aggiunge C:\your\path\here\alla corrente PATH.

Abbattendo:

  • set- Un comando che modifica le variabili d'ambiente di cmd solo per la sessione cmd corrente ; altri programmi e il sistema non sono interessati.
  • PATH=- Indica che PATHè la variabile di ambiente da modificare temporaneamente.
  • %PATH%;C:\your\path\here\- La %PATH%parte si espande al valore corrente di PATHe ;C:\your\path\here\viene quindi concatenata ad essa. Questo diventa il nuovo PATH.

16
@Ilya: intendevo aprire la finestra della console dopo che il percorso è stato modificato in MyComputer-> Proprietà-> Avanzate-> Variabili Env-> Percorso. Alcune app di Windows propagheranno le modifiche alle variabili di ambiente dopo l'avvio e altre no. WinXP cmd.exe no.
JimR,

7
se esco dalla console e riesco, devo ripristinare il percorso. Qualche idea su come rendere permanente questa modifica?
David 天宇 Wong,

2
@David 天宇 Wong Se segui "Risorse del computer"> "Proprietà"> "Avanzate"> "Variabili d'ambiente"> "Percorso". e aggiungi la directory alla fine di quella stringa, rimarrà. Assicurati di aprire la console dopo aver apportato la modifica.
theB3RV,

yup @ theB3RV, è solo una lunga strada per fare qualcosa di semplice. È strano che non ci siano comandi persistenti che possono essere digitati nella console
David 天宇 Wong,

12
@David 天宇 Wong Appena trovato "SETX è un modo per apportare modifiche permanenti, come la finestra di dialogo". quindi il comando SETX dovrebbe farlo
theB3RV

202

ATTENZIONE: questa soluzione può essere distruttiva per il PERCORSO e la stabilità del sistema. Come effetto collaterale, unirà il PERCORSO dell'utente e del sistema e troncerà il PERCORSO a 1024 caratteri. L'effetto di questo comando è irreversibile. Prima fai un backup di PATH. Vedi i commenti per maggiori informazioni.

Non copiare e incollare ciecamente questo. Usare con cautela.

Puoi aggiungere un percorso in modo permanentePATH con il setxcomando:

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

Rimuovere il /Mflag se si desidera impostare l'utente PATHanziché il sistema PATH.

Appunti:

  • Il setxcomando è disponibile solo in Windows 7 e versioni successive.
  • È necessario eseguire questo comando da un prompt dei comandi con privilegi elevati.

  • Se si desidera solo cambiare per la sessione corrente, utilizzare set .


7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"per impostare il valore PATH a livello di macchina
Lu55

7
Perché questa non è la risposta accettata? Immagino che la maggior parte delle persone vorrebbe impostare il loro percorso in modo permanente ...
Peter Gordon,


9
ATTENZIONE : a causa dell'uso della %PATH%variabile, questo comando unisce le variabili env globali a quelle degli utenti. No? Ciò può creare effetti collaterali indesiderati, in particolare con l'
opzione

4
ATTENZIONE 2: La %PATH%variabile potrebbe non essere sincronizzata con le variabili di ambiente poiché viene caricata all'avvio del prompt dei comandi e non ricaricata mai successivamente (anche quando si esegue il comando setx). Inoltre avrebbe potuto essere modificato localmente da script precedentemente eseguiti.
FF_Dev

66

Non è necessario alcun comando seto setx, basta aprire il terminale e digitare:

PATH

Questo mostra il valore corrente della variabile PATH. Ora vuoi aggiungere la directory ad esso? Digita semplicemente:

PATH %PATH%;C:\xampp\php

Se per qualsiasi motivo desideri cancellare la variabile PATH (nessun percorso o eliminare tutti i percorsi in essa), digita:

PATH ;

Aggiornare

Come ha osservato Danial Wilson nel commento di seguito, imposta il percorso solo nella sessione corrente. Per impostare il percorso in modo permanente utilizzare setxma essere consapevoli, anche se questo imposta il percorso in modo permanente ma NON nella sessione corrente, quindi è necessario avviare una nuova riga di comando per vedere le modifiche, maggiori informazioni qui .

Per verificare l'esistenza di una variabile ambientale o vederne il valore, utilizzare il comando ECHO:

echo %YOUR_ENV_VARIABLE%

1
Ha funzionato :) che ne dici! 'PATH% PATH%;' Me lo ricordo
Dustin Woodard,

12
Penso che questo funzioni solo per l'istanza della sessione cmd, usa setx per cambiarlo permanentemente
Daniel Wilson,

2
Non includere virgolette con questo. Ad esempio, chiama PATH %PATH%;C:\Program Files\...invece diPATH "%PATH%;C:\Program Files\..."
icc97

4
Non usare setx! Rischi il troncamento della variabile del tuo percorso, perdendo molti altri percorsi che hai impiegato a impostare. Fai attenzione agli avvertimenti sopra.
STWilson

1
@STWilson, troppo tardi per vedere il tuo commento!
West Yang,

48

Vorrei invece usare PowerShell!

Per aggiungere una directory a PATH usando PowerShell, procedi come segue:

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

Per impostare la variabile per tutti gli utenti, a livello di macchina, l'ultima riga dovrebbe essere come:

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

In uno script di PowerShell, potresti voler verificare la presenza del tuo C:\xampp\phpprima di aggiungere a PATH (nel caso sia stato precedentemente aggiunto). Puoi avvolgerlo in un ifcondizionale.

Quindi, mettendo tutto insieme:

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

Meglio ancora, si potrebbe creare una funzione generica. Basta fornire la directory che si desidera aggiungere:

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")
    }
}

Puoi migliorare le cose facendo un po 'di lucidatura. Ad esempio, utilizzare Test-Pathper confermare che la directory esiste effettivamente.


3
per chiamare SetEnvironmentVariablecon il Machineparametro è necessario aprire PowerShell con diritti di amministratore
InsOp

è amaramente deludente che questo guscio "potere" non riconosce% userprofile% né $ userprofile .. ma poi di nuovo, questo è finestre di cui stiamo parlando
abbood

3
@abbood Quello che stai cercando è $env:userprofile.
nyuszika7h,

3
È inoltre necessario specificare usero machinenella chiamata di GetEnvironmentVariable. Altrimenti, $PATHconterrà il valore sia dell'utente che della macchina parte del registro che farà esplodere inutilmente la variabile path quando la riporterà.
René Nyffenegger,

35

SETX più sicuro

Annuisci a tutti i commenti sulla risposta iniziale di @ NafscriptSETX .

  • SETXper impostazione predefinita aggiornerà il tuo percorso utente .
  • SETX ... /Maggiornerà il tuo percorso di sistema .
  • %PATH% contiene il percorso di sistema con il percorso utente aggiunto

Avvertenze

  1. Esegui il backupPATH : SETXtroncerà la tua posta indesiderata per più di 1024 caratteri
  2. Non chiamareSETX %PATH%;xxx : aggiunge il percorso di sistema al percorso dell'utente
  3. Non chiamareSETX %PATH%;xxx /M : aggiunge il percorso dell'utente nel percorso di sistema
  4. L'uso eccessivo di file batch può causare cecità 1

La pagina SETX ss64 contiene alcuni esempi molto validi. È importante sottolineare che le chiavi del Registro di sistema sono per SETXvsSETX /M

Variabili utente:

HKCU\Environment

Variabili di sistema:

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

Istruzioni d'uso

Aggiungi all'utente 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

Aggiungi al sistema PATH

append_system_path.cmd. Deve essere eseguito come amministratore.

(è sostanzialmente lo stesso tranne che con un diverso Keye il SETX /Mmodificatore)

@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

alternative

Infine, esiste potenzialmente una versione migliorata chiamata SETENV consigliata dalla pagina SETX ss64 che divide le impostazioni dell'utente o dell'ambiente.


1. Non strettamente vero


24

In ritardo alla festa, ma utile se ci si trova già nella directory che si desidera aggiungere al PERCORSO.

set PATH=%PATH%;%CD%

modifica: come da commento - funziona con Windows standard cmd ma non in PowerShell.

Per PowerShell l' %CD%equivalente è[System.Environment]::CurrentDirectory


1
Il mio Powershell dice che% CD% non è riconosciuto.
Paulo Matos,

@PauloMatos Potrebbe provare a usare[System.Environment]::CurrentDirectory
nclord

4

A parte tutte le risposte, se si desidera un utile strumento GUI per modificare le variabili di ambiente di Windows, è possibile utilizzare Rapid Environment Editor

Provalo! è sicuro da usare e fantastico!

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


2
Windows 10 ha migliorato significativamente l'editor delle variabili di Path Environment ora. Ci sono voluti solo 20 anni per aggirarlo.
icc97,

4
  • le modifiche alla riga di comando non saranno permanenti, andranno perse alla chiusura della console.
  • Il percorso funziona come primo arrivato, primo servito.
  • Potresti voler sostituire altri eseguibili già inclusi. Ad esempio, se hai già un'altra versione sul tuo percorso e vuoi aggiungere una versione diversa senza apportare modifiche permanenti sul percorso, dovresti inserire la directory all'inizio del comando.

Sostituire gli eseguibili già inclusi;

imposta PATH = C: \ xampp \ php;% PATH%;


2

Controllando i suggerimenti di cui sopra su Windows 10 LTSB, e con uno sguardo ai contorni "help" (che possono essere visualizzati digitando 'comando /?' Sul cmd), ho portato alla conclusione che il comando PATH cambia la variabile di ambiente di sistema I valori del percorso solo per la sessione corrente, ma dopo il riavvio tutti i valori vengono ripristinati ai valori predefiniti, proprio come erano prima dell'uso del comando PATH.

D'altra parte, usare il comando SETX con privilegi di amministratore è molto più potente, cambia quei valori per sempre (o almeno fino alla prossima volta che questo comando viene usato o fino alla prossima volta che questi valori vengono manipolati manualmente dalla GUI ...).

Ma per motivi di chiarezza ho pensato che condividere qui il miglior utilizzo della sintassi SETX che ha funzionato per me un giorno avrebbe potuto aiutare qualcuno:

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

dove dovrebbe essere evitato qualsiasi segno uguale '=' e non preoccuparti degli spazi! non è necessario inserire altre virgolette per un percorso che contiene spazi al suo interno: il segno di divisione ';' Fai il lavoro.

La parola chiave PATH che segue SETX definisce quale set di valori deve essere modificato tra i possibili valori delle variabili di ambiente di sistema e% PATH% (la parola PATH racchiusa tra le virgolette) all'interno delle virgolette, indica al sistema operativo di lasciare l'esistente PERCORSO i valori come sono e aggiungere il seguente percorso (quello che segue il segno di divisione ';') ai valori esistenti.

HTH


2

Per quanto riguarda il punto 2 sto usando un semplice file batch che sta popolando PATHo altre variabili d'ambiente per me. Pertanto, non vi è alcun inquinamento delle variabili di ambiente per impostazione predefinita. Questo file batch è accessibile ovunque, quindi posso digitare:

c:\>mybatchfile
-- here all env. are available
c:\>php file.php

Questa è una differenza importante tra * nix-es e Windows. Il batch viene eseguito nella stessa shell e le modifiche all'ambiente rimangono dopo la chiusura (nell'ambito della sessione). Tuttavia, ciò riduce entrambi i modi: un file batch può cancellare il tuo ambiente. (A proposito, su * nix-es dovresti solo fare sourceun tale file, come . mybatchfile).
Tomasz Gandor,

Ciao @ grzegorz-gajos, stavo cercando esattamente questo, il tuo link per maggiori dettagli fornisce 404. Qualche alternativa?
Devkabiir,

Spiacenti, il contenuto del link non è più disponibile. Ho rimosso.
Grzegorz Gajos,

1

In un prompt dei comandi si dice a Cmd di usare la riga di comando di Explorer eseguendo la prefazione con start.

Così start Yourbatchname.

Nota che devi registrarti come se il suo nome fosse batchfile.exe.

Programmi e documenti possono essere aggiunti al registro in modo che digitando il loro nome senza il loro percorso nella finestra di dialogo Start - Esegui o collegamento consenta a Windows di trovarli.

Questo è un file reg generico. Copia le righe sottostanti in un nuovo documento di testo e salvalo come anyname.reg. Modificalo con i tuoi programmi o documenti.

Nei percorsi usa \ per separare i nomi delle cartelle nei percorsi delle chiavi come regedit usa un singolo \ per separare i suoi nomi delle chiavi. Tutti i file reg iniziano con REGEDIT4. Un punto e virgola trasforma una riga in un commento. Il simbolo @ indica di assegnare il valore alla chiave anziché un valore denominato.

Il file non deve esistere. Questo può essere usato per impostare Word.exe per aprire Winword.exe.

La digitazione start batchfileinizierà 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\\"

Ti è già stato detto del percorso in un'altra risposta. Vedi anche doskey /?per le macro cmd (funzionano solo durante la digitazione).

È possibile eseguire i comandi di avvio per CMD. Dal riferimento tecnico del kit di risorse di 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.  

Descrizione

Contiene comandi che vengono eseguiti ogni volta che si avvia Cmd.exe.



1

Se si esegue il comando cmd, aggiornerà tutte le variabili di sistema per quella finestra di comando.


In un senso. Quello che succede è che si avvia una nuova sessione all'interno della sessione corrente. Per uscire dovrai chiamare exitdue volte, prima per chiudere la nuova e poi per chiudere la prima sessione (con il vecchio ambiente).
Farway,

1

usa percorso da gtools

fa le cose in modo intuitivo, ad esempio:

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

e mostra i risultati senza la necessità di generare un nuovo cmd !


0
  1. Ho installato PHP quella volta. Php-7 *** estratto . Zip in C: \ php \
  2. Esegui il backup della mia variabile d'ambiente PATH corrente: esegui cmded esegui comando:path >C:\path-backup.txt

  3. Ottieni il mio valore di percorso corrente nel file C: \ path.txt (allo stesso modo)

  4. Modifica path.txt (certo, la mia lunghezza del percorso è superiore a 1024 caratteri, Windows dura alcuni anni)
    • Ho rimosso percorsi duplicati lì, come 'C: \ Windows; oppure C: \ Windows \ System32; oppure C: \ Windows \ System32 \ Wbem; - Ne ho due volte.
    • Rimuovere anche i percorsi dei programmi disinstallati. Esempio: C: \ Programmi \ NonExistSoftware;
    • In questo modo, la lunghezza della stringa del mio percorso <1024 :)))
    • alla fine del percorso aggiungere stringa; C: \ php \
    • Copia il valore del percorso solo nel buffer con virgolette doppie con cornice! Esempio: "C: \ Windows; ****; C: \ php \" No PATH = dovrebbe essere lì !!!
  5. Apri Windows PowerShell come amministratore.
  6. Esegui comando:

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

  1. Riesegui il tuo terminale (utilizzo "Far manager") e controlla: php -v

0

Per quanto banale, ho dovuto riavviare Windows di fronte a questo problema.

Sto eseguendo Windows 7 x64. Ho effettuato un aggiornamento manuale della variabile PATH di sistema. Funzionava bene se avessi eseguito cmd.exe dal menu delle statistiche. Ma se digito "cmd" nella barra degli indirizzi di Windows Explorer, sembra caricare il PERCORSO da altrove, che non ha avuto le mie modifiche manuali.

(Per evitare dubbi, sì, ho chiuso e rieseguito cmd un paio di volte prima di riavviare e non ha aiutato.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.