Ustawianie lub modyfikowanie (systemowej) zmiennej środowiskowej w cmd.exe

13

Szukam wygodnego sposobu dodawania i / lub modyfikowania i / lub usuwania zmiennej środowiskowej z wiersza poleceń. Szczególnie czasami znajduję się w sytuacjach, gdy muszę dodać kilka zmiennych w cmd.exe.

Byłbym wdzięczny, gdyby ktoś pokazał mi sposób inny niż GUI do modyfikowania (tj. Dodawania nowego katalogu) %PATH%zmiennej.

Zmiana powinna być trwała, nie tylko na czas trwania cmdsesji.

René Nyffenegger
źródło
1
Myślę, że jednym z problemów jest to, że większość zmian stałych , ogólnosystemowych zmiennych środowiskowych wymaga wylogowania / logowania (lub ponownego uruchomienia), aby sesja użytkownika mogła korzystać ze zmodyfikowanych wartości.
quack quixote

Odpowiedzi:

8

Metoda Old School bezpośredniego manipulowania zmiennymi rejestru za pomocą polecenia reg polegała na użyciu pieniędzy. Oto jak to zrobić:

reg add HKCU\Environment /v PATH /d "%addonpath%;%path%" /f

Rzuć to do skryptu o jednej linii o nazwie apath.bat, który wygląda następująco:

@echo off
reg add HKCU\Environment /v PATH /d "%~dp0;%path%" /f

Następnie wystarczy podać ścieżkę nowego katalogu dodawanego podczas wywoływania skryptu i wybierania numeru:

np .: apath.bat% addonpath%

Chociaż Hinch ma rację. Najlepszym sposobem, aby to zrobić, jeśli używasz systemu Vista lub nowszego, jest użycie polecenia SETX, które pozwala nam propagować zmienne środowiskowe bez ryzyka bezpośredniego manipulowania rejestrem za pomocą polecenia reg, które może uratować komputer, jeśli manipulujesz zmiennymi ENV na tyle, aby używać ich w locie.

użytkownik51259
źródło
Czy to polecenie wymaga ponownego uruchomienia?
Juzer Ali,
Nie, ale musisz użyć nowego procesu (cmd).
Mike
1
Dla mnie to wymaga ponownego uruchomienia? dlaczego? Korzystam z systemu Windows XP, sp3.
Changwang Zhang
15

Możesz użyć setx.

Zmienna użytkownika:

SETX PATH "%PATH%;C:\MyDir"

Zmienna systemowa:

SETX PATH "%PATH%;C:\MyDir" /M
Gafel
źródło
Wierzę, że SETX jest dostępny od Visty, ale używam XP.
René Nyffenegger,
kopiowanie setx.exe z komputera z systemem Vista może być niemożliwe. prawdopodobnie nie zadziała, ale może.
quack quixote
2
SETX jest częścią Resource Tools dla Windows Server 2003. Możesz po prostu dodać go do katalogu system32 lub do dowolnej innej dodanej do ciebie ścieżki (egg-egg!).
paradroid
Potrzebuję części / M, aby móc modyfikować zmienną systemową, a nie zmienną użytkownika. Dzięki!
Andrei Sfat,
Oba podane polecenia są nieprawidłowe. Dlaczego? Windows faktycznie utrzymuje dwie wartości ŚCIEŻKI: dla całego systemu i dla użytkownika. Kiedy piszesz echo %PATH%, widzisz je połączone razem, jak <system path>;<user path>. Zatem pierwsze polecenie wymusi pojawienie się bieżących elementów ścieżki systemowej na ścieżce użytkownika (co nie jest takie złe), a drugie polecenie spowoduje pojawienie się bieżących elementów ścieżki użytkownika na ścieżce systemowej (co jest niedopuszczalne).
Sasha
1

Możesz użyć HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorunklucza rejestru, aby wskazać plik wsadowy, aby umożliwić ci dokonywanie półtrwałych zmian bez zagłębiania się w tajemnicze okna dialogowe ustawień.

Phoshi
źródło
O ile wiem, miałoby to wpływ tylko na kolejne wywołania cmd.exe (bez flagi / d), ale nie na cały system lub inne (później wywołane) procesy.
René Nyffenegger
To jest poprawne. Uważam, że ta zaleta oznacza, że ​​możesz zrobić więcej, nie martwiąc się o różne procesy, nie wiedząc, co robić. BĘDZIE jednak działać w każdym interaktywnym monicie, co zawsze jest miłe: P
Phoshi,
1

Jeśli nie chcesz używać GUI (jak w Panelu sterowania, System, Zaawansowane, Zmienne środowiskowe, ŚCIEŻKA), prawdopodobnie możesz użyć REGdo ustawienia HKCU\Environment\PATH.

  • aktualizacja %PATH%
  • REG ADD HKCU\Environment /v PATH /t REG\_EXPAND\_SZ /d "%PATH%" /f

Te /fsiły nadpisywanie istniejących wartości, dzięki czemu nie trzeba interaktywnie odpowiedzieć na pytanie.

Edycja: %PATH% należy zacytować.

Edycja: Warto również zauważyć, że prawdopodobnie wymaga to ponownego uruchomienia lub ponownego zalogowania, zanim zacznie obowiązywać. Podczas zmiany w GUI obowiązuje natychmiast (dla nowych cmd.exesesji).

Odniesienie: http://support.microsoft.com/kb/104011

Jak wspomniano w odnośniku, jeśli chcesz napisać kod, możesz wysłać WM_SETTINGCHANGE, co powinno uniknąć wymogu logowania / wylogowania.

opello
źródło
to byłoby bardzo przydatne. Ale jeśli zapytam o tę zmienną, nic nie zwróci.
PA.
Hmm. Na XP Pro SP3 Angielski i dostać moją drogę z: REG QUERY HKCU\Environment /v PATH.
opello
jest to ścieżka specyficzna dla użytkownika, a nie ścieżka systemowa. nie jestem pewien, gdzie on mieszka. mogą być ustawione na tę samą rzecz, ale zwykle zawierają osobne rzeczy (a twoja ścieżka robocza to połączenie tych dwóch).
quack quixote
Racja, jest w HKCU. Artykuł z KB firmy Microsoft ma obie lokalizacje rejestru.
opello
1
To jest prawie to, czego szukam ... jeśli istnieje sposób, aby wysłać również WM_SETTINGCHANGE z cmd.exe.
René Nyffenegger
0

Łatwo jest zmienić ścieżkę w bieżącym procesie cmd.exe:

PATH c:\MyNewDirectory;%PATH%

Zawsze możesz zrobić HELP PATH, aby uzyskać pomoc dotyczącą polecenia PATH.

jdigital
źródło
1
Czy to nie jest dobre tylko na sesję?
JL.
tak, nie utrzymuje się to między sesjami.
John T
JL ma rację i szukałem stałego rozwiązania. Zredagowałem odpowiednio moje pytanie.
René Nyffenegger
0

W celu uzyskania naprawdę trwałych zmian w całym systemie, naprawdę chcesz użyć panelu sterowania systemu (inaczej Mój komputer -> Właściwości -> Zaawansowane -> Zmienne środowiskowe, dla WinXP). Ustawienia wpływają na cały system, w tym programy GUI w powłoce Explorer.

Jeśli potrzebujesz tylko tych zmian w cmd.exepowłoce, możesz uruchomić plik wsadowy, który je ustawia przy każdym uruchomieniu okna cmd.exe. Odpowiedź Phoshi wspomina o HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, co wydaje się doskonałą opcją - łatwo wprowadzić niewielkie zmiany i w razie potrzeby ponownie uruchomić z wiersza poleceń. Ale to nie wpłynie na okna GUI lub powłokę Eksploratora.

Tak naprawdę jestem zaskoczony, że Sysinternals nie ma odpowiedniego narzędzia, aby to zrobić. Może może to zrobić inny PStools ?

quack quixote
źródło
0

Jest na to wiele sposobów. REG ADD to jeden lub REG IMPORT (przy użyciu wyeksportowanego pliku .REG z innego komputera). SETX / M to kolejny. Możesz go również wypchnąć, korzystając z Preferencji zasad grupy (najbardziej praktyczny i najprostszy sposób dla dużej liczby komputerów)

Skatterbrainz
źródło
0

Kolejna myśl, o której tu nie wspomniano, utwórz skrypt automatycznego klucza, który uruchomi panel sterowania i wprowadzi go dla Ciebie. Działa dobrze, jeśli jesteś już użytkownikiem AHK :-)

https://autohotkey.com/board/topic/63210-modify-system-path-gui/

A co z edycją hklm / system / currentcontrolset001 / control / session manager / environment: path key? Ale ten sam klucz znajduje się w hklm / system / currentcontrolset002 i hklm / system / currentcontrolset. Wygląda na to, że może to być poprawne, tutaj: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-unning -an-inno-setup-install

Justin Goldberg
źródło