Dodanie katalogu do zmiennej środowiskowej PATH w systemie Windows


523

Próbuję dodać C:\xampp\phpdo mojej systemowej PATHzmiennej środowiskowej w systemie Windows.

Dodałem go już za pomocą okna dialogowego Zmienne środowiskowe.

Ale kiedy piszę w konsoli:

C:\>path

nie wyświetla nowego C:\xampp\phpkatalogu:

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

Mam dwa pytania:

  1. Dlaczego się to stało? Czy coś zrobiłem źle?
  2. Ponadto, jak dodać katalogi do mojej PATHzmiennej za pomocą konsoli (i programowo, z plikiem wsadowym)?

43
Jest to temat, ponieważ jest to pytanie o „narzędzia, z których zwykle korzystają programiści”. Jeśli tworzysz w systemie Windows i nigdy nie musiałeś modyfikować ŚCIEŻKI, jestem zaskoczony. Aby zaspokoić pragnienie bycia związanym z programowaniem, zwróciłem uwagę na to, co wskazała najwyższa głosowana odpowiedź: Możesz to zrobić programowo za pomocą konsoli (lub pliku wsadowego).
George Stocker

1
dzięki za recenzję @GeorgeStocker no tak, zrobiłem to programowo, ale po prostu nie miałem pojęcia, że ​​muszę się ponownie zalogować po zastosowaniu zmian w sesji konsoli. (i myślę, że to tylko w moim przypadku), ale najwyższa głosowana odpowiedź ogólnie odpowiada na pytanie
Netorica

1
@George - uzgodnione, ale w obecnej formie to pytanie jest napisane dla superużytkownika, a nie przepełnienia stosu. Super Użytkownik zapewni pomoc w konfiguracjach serwera WWW do użytku osobistego. Przepełnienie stosu służy do programowania pytań.
jww

1
Wyjdź i otwórz nową konsolę ... Jeśli używasz bash, może to wymagać ponownego uruchomienia systemu, zanim zmiany się utrzymają, w zależności od tego, jak / czego używasz.
Tracker1

Odpowiedzi:


148

To tylko modyfikuje rejestr. Istniejący proces nie użyje tych wartości. Nowy proces zrobi to, jeśli zostanie uruchomiony po tej zmianie i nie odziedziczy starego środowiska po rodzicu.

Nie określono sposobu rozpoczęcia sesji konsoli. Najlepszym sposobem, aby to zapewnić, jest zamknięcie powłoki poleceń i ponowne uruchomienie. Następnie powinien odziedziczyć zaktualizowaną ŚCIEŻKĘ.


9
Hmm, nie, to naprawdę modyfikuje rejestr. Powinno być trochę oczywiste, robiąc to w oknie dialogowym Panelu sterowania zamiast, powiedzmy, wiersza polecenia z poleceniem PATH. Możesz obserwować, co robi z łatwością za pomocą Monitora procesów SysInternals, jeśli to ważne. Korzystanie ze ŚCIEŻKI nie jest tym samym, wszelkie wprowadzone zmiany zostaną utracone po zamknięciu konsoli. SETX to sposób na wprowadzanie trwałych zmian, takich jak okno dialogowe.
Hans Passant

3
To jest poprawne. Zawsze musisz ponownie uruchomić sesję konsoli, zanim pobierze ona nowe zmienne środowiskowe.
BrainSlugs83

1
Czy sesja konsoli zaktualizowałaby zmienne, gdyby WM_SETTINGCHANGEwiadomość została wysłana z aplikacji? stackoverflow.com/a/8358361
John_West

Jest to teoretycznie możliwe, ale żadna praktyczna implementacja CRT, o której wiem, faktycznie tego nie robi. Explorer robi.
Hans Passant

1

958

opcja 1

Po zmianie PATHza pomocą GUI zamknij i ponownie otwórz okno konsoli.

Działa to, ponieważ tylko programy uruchomione po zmianie zobaczą nowy PATH.

Opcja 2

Wykonaj to polecenie w otwartym oknie poleceń:

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

To polecenie dołącza C:\your\path\here\do bieżącego PATH.

Podział:

  • set- Polecenie zmieniające zmienne środowiskowe cmd tylko dla bieżącej sesji cmd ; inne programy i system pozostają nienaruszone.
  • PATH=- Oznacza, że PATHzmienna środowiskowa ma zostać tymczasowo zmieniona.
  • %PATH%;C:\your\path\here\- %PATH%Część rozwija się do bieżącej wartości PATH, a ;C:\your\path\here\następnie zostaje z nią połączona. To staje się nowe PATH.

16
@Ilya: Chciałem, abyś otworzył okno konsoli po zmianie ścieżki w MyComputer-> Właściwości-> Zaawansowane-> Zmienne Env-> Ścieżka. Niektóre aplikacje systemu Windows będą propagować zmiany zmiennych środowiskowych po ich uruchomieniu, a niektóre nie. WinXP cmd.exe nie działa.
JimR

7
jeśli wyjdę z konsoli i uruchomię ponownie, muszę zresetować ścieżkę. Masz pomysł, jak wprowadzić tę zmianę na stałe?
David 天宇 Wong

2
@David 天宇 Wong Jeśli podążasz za „Mój komputer”> „Właściwości”> „Zaawansowane”> „Zmienne środowiskowe”> „Ścieżka”. i dodaj katalog na końcu tego ciągu, pozostanie. Pamiętaj tylko o otwarciu konsoli po dokonaniu zmiany.
theB3RV

tak @B3RV, to tylko długa droga do zrobienia czegoś prostego. Dziwne, że nie ma trwałego polecenia, które można by wpisać w konsoli
David 天宇 Wong

12
@David 天宇 Wong Właśnie znalazł „SETX to sposób na wprowadzanie trwałych zmian, takich jak okno dialogowe”. więc powinna to zrobić
komenda SETX

202

OSTRZEŻENIE: To rozwiązanie może mieć destrukcyjny wpływ na ŚCIEŻKĘ i stabilność systemu. Efektem ubocznym będzie scalenie ŚCIEŻKI użytkownika i systemu oraz obcięcie ŚCIEŻKI do 1024 znaków. Efekt tego polecenia jest nieodwracalny. Najpierw wykonaj kopię zapasową ŚCIEŻKI. Zobacz komentarze, aby uzyskać więcej informacji.

Nie ślepo kopiuj i wklej to. Używaj ostrożnie.

Można na stałe dodać ścieżkę PATHz setxpoleceniem:

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

Usuń /Mflagę, jeśli chcesz ustawić użytkownika PATHzamiast systemu PATH.

Uwagi:

  • setxPolecenie jest dostępne tylko w systemie Windows 7 i nowszych.
  • Należy uruchomić to polecenie z wiersza polecenia z podwyższonym poziomem uprawnień.

  • Jeśli chcesz to zmienić tylko dla bieżącej sesji, użyj set .


7
SETX /M path "%path%;C:\Program Files (x86)\Git\bin\"ustawić wartość PATH na poziomie maszyny
Lu55

7
Dlaczego to nie jest zaakceptowana odpowiedź? Wyobrażam sobie, że większość ludzi chciałaby wytyczyć swoją ścieżkę na stałe ...
Peter Gordon,


9
OSTRZEŻENIE : Z powodu użycia %PATH%zmiennej to polecenie łączy globalne zmienne env ze zmiennymi użytkowników. Prawda? Może to powodować niepożądane skutki uboczne, szczególnie z przełącznikiem / M
FF_Dev

4
UWAGA 2:%PATH% zmienna nie może być zsynchronizowane ze zmiennych środowiskowych, jak to jest ładowany przy uruchomieniu wiersza polecenia i nigdy potem przeładowane (nawet podczas wykonywania polecenia setx). Można to również zmienić lokalnie przez wcześniej wykonane skrypty.
FF_Dev

66

Nie potrzebujesz żadnych poleceń setani setxpoleceń, po prostu otwórz terminal i wpisz:

PATH

To pokazuje aktualną wartość zmiennej PATH. Teraz chcesz dodać do niego katalog? Po prostu wpisz:

PATH %PATH%;C:\xampp\php

Jeśli z jakiegokolwiek powodu chcesz wyczyścić zmienną PATH (żadnych ścieżek lub usunąć wszystkie ścieżki w niej), wpisz:

PATH ;

Aktualizacja

Jak zauważył Danial Wilson w komentarzu poniżej, ustawia ścieżkę tylko w bieżącej sesji. Aby ustawić ścieżkę na stałe, setxale pamiętaj, chociaż ustawia ona ścieżkę na stałe, ale NIE w bieżącej sesji, więc musisz uruchomić nowy wiersz poleceń, aby zobaczyć zmiany, więcej informacji tutaj .

Aby sprawdzić, czy istnieje zmienna środowiskowa lub zobaczyć jej wartość, użyj polecenia ECHO:

echo %YOUR_ENV_VARIABLE%

1
Udało się :) a co powiesz na to! „PATH% PATH%;” Pamiętam to
Dustin Woodard,

12
Myślę, że to działa tylko dla instancji sesji cmd, użyj setx, aby zmienić to na stałe
Daniel Wilson

2
Nie dołączaj do tego cytatów. Na przykład zadzwoń PATH %PATH%;C:\Program Files\...zamiastPATH "%PATH%;C:\Program Files\..."
icc97

4
Nie używaj setx! Ryzykujesz obcięciem zmiennej ścieżki, tracąc wiele innych ścieżek, które ustawiłeś. Przestrzegaj ostrzeżeń powyżej.
STWilson,

1
@STWilson, za późno, aby zobaczyć Twój komentarz!
West Yang,

48

Zamiast tego użyłbym PowerShell!

Aby dodać katalog do PATH za pomocą programu PowerShell, wykonaj następujące czynności:

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

Aby ustawić zmienną dla wszystkich użytkowników, na całym komputerze, ostatni wiersz powinien wyglądać tak:

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

W skrypcie PowerShell możesz sprawdzić jego obecność C:\xampp\phpprzed dodaniem do PATH (w przypadku, gdy został wcześniej dodany). Możesz zawinąć to w ifwarunkowe.

Podsumowując:

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

Co więcej, można stworzyć funkcję ogólną. Po prostu podaj katalog, który chcesz dodać:

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

Możesz poprawić sytuację, polerując. Na przykład przy użyciu Test-Pathdo potwierdzenia, że ​​Twój katalog faktycznie istnieje.


3
do wywoływania SetEnvironmentVariablez Machineparametrem musisz otworzyć PowerShell z uprawnieniami administratora
InsOp,

to gorzko rozczarowujące, że ta „moc” shell nie rozpoznaje% USERPROFILE% ani $ UserProfile .. ale potem znowu, to jest windows mówimy
abbood

3
@abbood To, czego szukasz $env:userprofile.
nyuszika7h,

3
Powinieneś również podać jeden userlub machinew zaproszeniu GetEnvironmentVariable. W przeciwnym razie $PATHbędzie zawierać zarówno wartość rejestru dla użytkownika, jak i komputera, która niepotrzebnie wysadzi zmienną ścieżki podczas jej ponownego przechowywania.
René Nyffenegger

35

Bezpieczniejszy SETX

Kiwnij głową na wszystkie komentarze na temat Kiwnij głową na początkowej SETXodpowiedzi @ Nafscript .

  • SETXdomyślnie zaktualizuje ścieżkę użytkownika .
  • SETX ... /Mzaktualizuje ścieżkę systemową .
  • %PATH% zawiera ścieżkę systemową z dołączoną ścieżką użytkownika

Ostrzeżenia

  1. Utwórz kopię zapasową PATH - SETXspowoduje obcięcie śmieci na więcej niż 1024 znaki
  2. Nie dzwoń SETX %PATH%;xxx - dodaje ścieżkę systemową do ścieżki użytkownika
  3. Nie dzwoń SETX %PATH%;xxx /M - dodaje ścieżkę użytkownika do ścieżki systemowej
  4. Nadmierne użycie pliku wsadowego może spowodować ślepotę 1

Strona SETX ss64 ma kilka bardzo dobrych przykładów. Co ważne, wskazuje, gdzie są klucze rejestru dla SETXvsSETX /M

Zmienne użytkownika:

HKCU\Environment

Zmienne systemowe:

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

Instrukcje użytkowania

Dołącz do użytkownika 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

Dołącz do systemu PATH

append_system_path.cmd. Musi być uruchomiony jako administrator.

(jest w zasadzie taki sam, z wyjątkiem innego Keyi SETX /Mmodyfikatora)

@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

Alternatywy

Wreszcie istnieje potencjalnie ulepszona wersja o nazwie SETENV zalecana przez stronę SETX ss64, która dzieli ustawienia zmiennych środowiskowych użytkownika lub systemu.


1. Nie do końca prawda


24

Późno na imprezę - ale przydatne, jeśli jesteś już w katalogu, który chcesz dodać do PATH.

set PATH=%PATH%;%CD%

edycja: jak na komentarz - działa ze standardowym Windows cmd, ale nie w PowerShell.

W przypadku PowerShell %CD%odpowiednikiem jest[System.Environment]::CurrentDirectory


1
My Powershell mówi, że% CD% nie jest rozpoznawany.
Paulo Matos

@PauloMatos Można spróbować użyć[System.Environment]::CurrentDirectory
nclord

4

Oprócz wszystkich odpowiedzi, jeśli chcesz ładne narzędzie GUI do edycji zmiennych środowiskowych systemu Windows, których możesz użyć Rapid Environment Editor

Spróbuj! jest bezpieczny w użyciu i niesamowity!

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


2
System Windows 10 znacznie poprawił teraz edytor zmiennych Path Environment. Zajęło im to tylko 20 lat.
icc97

4
  • zmiany wiersza poleceń nie będą trwałe, zostaną utracone po zamknięciu konsoli.
  • Ścieżka działa, jak pierwszy, ten lepszy.
  • Możesz zastąpić inne już zawarte pliki wykonywalne. Na przykład, jeśli masz już inną wersję na swojej ścieżce i chcesz dodać inną wersję bez dokonywania trwałej zmiany na ścieżce, powinieneś umieścić katalog na początku polecenia.

Aby zastąpić już zawarte pliki wykonywalne;

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


2

Sprawdzenie powyższych sugestii w systemie Windows 10 LTSB i spojrzenie na kontury „pomocy” (które można wyświetlić po wpisaniu polecenia /? Na cmd) doprowadziły mnie do wniosku, że polecenie PATH zmienia zmienną środowiskową systemu Wartości ścieżek tylko dla bieżącej sesji, ale po ponownym uruchomieniu wszystkie wartości resetują się do wartości domyślnych - podobnie jak przed użyciem polecenia PATH.

Z drugiej strony użycie polecenia SETX z uprawnieniami administracyjnymi jest o wiele bardziej wydajne, zmienia te wartości na dobre (lub przynajmniej do następnego użycia tego polecenia lub do następnego użycia tych wartości ręcznie w GUI ...).

Ale dla jasności pomyślałem, że dzielenie się tutaj najlepszym użyciem składni SETX, które działało dla mnie, może komuś pomóc:

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

gdzie należy unikać wszelkich znaków równości „=” i nie martw się spacjami! nie ma potrzeby wstawiania żadnych cudzysłowów dla ścieżki zawierającej spacje - znak podziału ';' wykonuj robotę.

Słowo kluczowe PATH występujące po SETX określa, który zestaw wartości powinien zostać zmieniony pomiędzy możliwymi wartościami zmiennych środowiska systemowego, a% PATH% (słowo PATH otoczone znakiem procentu) wewnątrz cudzysłowów informuje system operacyjny o pozostawieniu istniejącego Wartości PATH takimi, jakie są, i dodaj następującą ścieżkę (tę, która następuje po znaku podziału „;”) do istniejących wartości.

HTH


2

Odnośnie do punktu 2 używam prostego pliku wsadowego, który się zapełnia PATHlub innych zmiennych środowiskowych dla mnie. Dlatego domyślnie nie ma zanieczyszczenia zmiennymi środowiskowymi. Ten plik wsadowy jest dostępny z każdego miejsca, więc mogę wpisać:

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

Jest to ważna różnica między * nix-es a Windows. Wsad działa w tej samej powłoce, a zmiany w środowisku pozostają po wyjściu (w zakresie sesji). To jednak ogranicza obie strony: plik wsadowy może zniszczyć środowisko. (BTW, na * nix-es trzeba tylko sourcetaki plik, na przykład . mybatchfile).
Tomasz Gandor,

Cześć @ grzegorz-gajos, właśnie tego szukałem, twój link do dalszych szczegółów daje 404. Jakieś alternatywy?
devkabiir

Przepraszamy, treść linku nie jest już dostępna. Usunąłem.
Grzegorz Gajos

1

W wierszu polecenia informujesz Cmd, aby używał wiersza polecenia Eksploratora, zastępując go znakiem start.

Tak start Yourbatchname.

Uwaga: musisz się zarejestrować, jakby nazywał się batchfile.exe.

Programy i dokumenty można dodawać do rejestru, więc wpisanie ich nazwy bez ścieżki w oknie dialogowym Start - Uruchom lub skrót umożliwia Windowsowi ich odnalezienie.

To jest ogólny plik reg. Skopiuj poniższe wiersze do nowego dokumentu tekstowego i zapisz go jako anyname.reg. Edytuj go za pomocą programów lub dokumentów.

W ścieżkach użyj \ do oddzielenia nazw folderów w ścieżkach kluczy, ponieważ regedit używa pojedynczego \ do rozdzielenia nazw kluczy. Wszystkie pliki reg zaczynają się od REGEDIT4. Średnik zamienia linię w komentarz. Symbol @ oznacza przypisanie wartości do klucza zamiast wartości nazwanej.

Plik nie musi istnieć. Można tego użyć do ustawienia Word.exe w celu otwarcia Winword.exe.

Pisanie start batchfilerozpocznie się 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\\"

W innej odpowiedzi powiedziano ci już o ścieżce. Zobacz takżedoskey /? makra cmd (działają tylko podczas pisania).

Możesz uruchamiać polecenia uruchamiania dla CMD. Z dokumentacji technicznej zestawu Windows Recource Kit

AutoRun

HKCU\Software\Microsoft\Command Processor 

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

Opis

Zawiera polecenia, które są wykonywane przy każdym uruchomieniu Cmd.exe.



1

Jeśli uruchomisz polecenie cmd, zaktualizuje ono wszystkie zmienne systemowe dla tego okna poleceń.


W sensie. Dzieje się tak, że zaczynasz nową sesję w ramach bieżącej sesji. Wyjście będzie wymagało exitdwukrotnego połączenia , najpierw zamknięcia nowej, a następnie pierwszej sesji (w starym środowisku).
Farway

1

użyj pathed z gtools

robi rzeczy w intuicyjny sposób, np .:

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

pokazuje wyniki bez potrzeby odradzania nowego cmd !


0
  1. Tym razem zainstalowałem PHP. Wyodrębniono php-7 ***. Zip do C: \ php \
  2. Wykonaj kopię zapasową mojej bieżącej zmiennej środowiskowej PATH: uruchom cmdi uruchom polecenie:path >C:\path-backup.txt

  3. Pobierz moją bieżącą wartość ścieżki do pliku C: \ path.txt (w ten sam sposób)

  4. Zmodyfikuj path.txt (oczywiście, moja długość ścieżki wynosi ponad 1024 znaki, system Windows działa kilka lat)
    • Usunąłem tam zduplikowane ścieżki, takie jak „C: \ Windows; lub C: \ Windows \ System32; lub C: \ Windows \ System32 \ Wbem; - Mam dwa razy.
    • Usuń również ścieżki odinstalowanych programów. Przykład: C: \ Program Files \ NonExistSoftware;
    • W ten sposób moja długość ciągu ścieżki <1024 :)))
    • na końcu ciągu ścieżki dodaj; C: \ php \
    • Skopiuj wartość ścieżki tylko do bufora z podwójnymi cudzysłowami w ramce! Przykład: „C: \ Windows; ****; C: \ php \” Nie PATH = powinno tam być !!!
  5. Otwórz program Windows PowerShell jako administrator.
  6. Uruchom polecenie:

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

  1. Uruchom ponownie terminal (używam „Far manager”) i sprawdź: php -v

0

Choć może to być banalne, musiałem zrestartować system Windows w obliczu tego problemu.

Korzystam z systemu Windows 7 x64. Zrobiłem ręczną aktualizację zmiennej systemowej PATH. Działa to dobrze, jeśli uruchomię cmd.exe z menu statystyk. Ale jeśli wpiszesz „cmd” w pasku adresu Eksploratora Windows, wydaje się, że ładuje ŚCIEŻKĘ z innego miejsca, które nie zawierało moich ręcznych zmian.

(Aby uniknąć wątpliwości - tak, kilkakrotnie zamknąłem i uruchomiłem cmd przed ponownym uruchomieniem i to nie pomogło.)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.