Festlegen oder Ändern einer (systemweiten) Umgebungsvariablen in cmd.exe

13

Ich suche nach einer bequemen Möglichkeit, eine Umgebungsvariable in der Befehlszeile hinzuzufügen und / oder zu ändern und / oder zu löschen. Insbesondere finde ich mich manchmal in Situationen wieder, in denen ich einige Variablen in cmd.exe hinzufügen muss.

Ich wäre dankbar, wenn mir jemand eine nicht-GUI-Methode zeigen würde, um die %PATH%Variable zu ändern (dh ein neues Verzeichnis hinzuzufügen) .

Die Änderung sollte dauerhaft sein, nicht nur für die Dauer der cmdSitzung.

René Nyffenegger
quelle
1
Ich denke, ein Problem, das Sie feststellen werden, ist, dass die meisten Änderungen an den permanenten , systemweiten Umgebungsvariablen eine Abmeldung / Anmeldung (oder einen Neustart) erfordern, damit die Benutzersitzung die geänderten Werte verwendet.
Quack Quijote

Antworten:

8

Die Old-School-Methode zur direkten Manipulation von Registrierungsvariablen mit dem Befehl reg stand auf dem Spiel. So machst du es:

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

Wirf das in ein einzeiliges Skript namens apath.bat, das so aussieht:

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

Dann müssen Sie nur noch den Pfad des neuen Verzeichnisses angeben, das Sie beim Aufrufen des Skripts hinzugefügt haben, und Sie werden angewählt:

zB: apath.bat% addonpath%

Obwohl Hinch recht hat. Wenn Sie mit Vista oder höher arbeiten, verwenden Sie am besten den Befehl SETX, mit dem wir Umgebungsvariablen weitergeben können, ohne das Risiko einzugehen, die Registrierung mit dem Befehl reg direkt zu manipulieren, mit dem Sie Ihren Computer retten könnten, wenn Sie bearbeiten die ENV-Variablen so weit, dass Sie sie sofort verwenden können.

user51259
quelle
Erfordert dieser Befehl einen Neustart?
Juzer Ali
Nein, aber Sie müssen einen neuen (cmd) Prozess verwenden.
Mike
1
Für mich muss es neu gestartet werden? Warum? Ich bin auf Windows XP, SP3.
Changwang Zhang
15

Sie könnten setx verwenden.

Benutzervariable:

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

Systemvariable:

SETX PATH "%PATH%;C:\MyDir" /M
Gaff
quelle
Ich glaube, SETX ist seit Vista verfügbar, aber ich bin auf XP.
René Nyffenegger
Sie könnten in der Lage sein, setx.exe von einem Vista-Rechner zu kopieren. wahrscheinlich wird es nicht funktionieren, aber es könnte.
Quack Quijote
2
SETX ist Teil der Resource Tools für Windows Server 2003. Sie können es einfach Ihrem System32-Verzeichnis oder jedem anderen Pfad (chicken-egg!) Hinzufügen.
Paradroid
Ich brauche den / M-Teil, damit ich die Systemvariable ändern kann, nicht die Benutzervariable. Vielen Dank!
Andrei Sfat
Beide angegebenen Befehle sind falsch. Warum? Windows verwaltet tatsächlich zwei PATH-Werte: systemweit und benutzerspezifisch. Wenn Sie tippen echo %PATH%, sehen Sie, wie sie miteinander kombiniert werden <system path>;<user path>. Der erste Befehl erzwingt daher, dass aktuelle Elemente des Systempfads im Benutzerpfad angezeigt werden (was nicht so schlimm ist), während der zweite Befehl bewirkt, dass aktuelle Elemente des Benutzerpfads im Systempfad angezeigt werden (was nicht akzeptabel ist).
Sasha
1

Sie können den HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutorunRegistrierungsschlüssel verwenden, um auf eine Batchdatei zu verweisen, damit Sie semipermanente Änderungen vornehmen können, ohne sich mit den geheimen Einstellungsdialogen zu befassen.

Phoshi
quelle
Soweit ich weiß, würde dies nur nachfolgende Aufrufe von cmd.exe (ohne das Flag / d) beeinflussen, nicht jedoch das gesamte System oder andere (nachfolgend aufgerufene) Prozesse.
René Nyffenegger
Das ist richtig. Ich finde, dass ein Vorteil bedeutet, dass Sie mehr tun können, ohne sich über verschiedene Prozesse Gedanken machen zu müssen, ohne zu wissen, was zu tun ist. Es wird jedoch in jeder interaktiven Eingabeaufforderung funktionieren, was immer schön ist: P
Phoshi
1

Wenn Sie die GUI nicht verwenden möchten (wie in Systemsteuerung, System, Erweitert, Umgebungsvariablen, PFAD), können Sie diese wahrscheinlich verwenden, REGum sie festzulegen HKCU\Environment\PATH.

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

Das /fÜberschreiben des vorhandenen Werts wird erzwungen, sodass Sie die Frage nicht interaktiv beantworten müssen.

Bearbeiten: %PATH% muss in Anführungszeichen gesetzt werden.

Bearbeiten: Es ist auch erwähnenswert, dass dies wahrscheinlich einen Neustart oder eine erneute Anmeldung erfordert, bevor es wirksam wird. Während des Änderns wird es in der GUI sofort wirksam (für neue cmd.exeSessions).

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

Wie in der Referenz erwähnt, können Sie WM_SETTINGCHANGE senden, wenn Sie Code schreiben möchten, und dies sollte die Anmelde- / Abmeldeanforderung umgehen.

Opello
quelle
das wäre sehr nützlich. Aber wenn ich nach dieser Variablen frage, gibt sie nichts zurück.
PA.
Hrm. Auf XP Pro SP3 Englisch ich meine PATH erhalten mit: REG QUERY HKCU\Environment /v PATH.
Opello
Es ist ein benutzerspezifischer Pfad, nicht der systemweite Pfad. Ich bin mir nicht sicher, wo dieser lebt. Sie können auf dasselbe Objekt eingestellt werden, enthalten jedoch normalerweise separate Objekte (und Ihr Arbeitspfad ist eine Verschmelzung der beiden).
Quack Quijote
Richtig, es ist in HKCU. Der verknüpfte Microsoft KB-Artikel enthält beide Registrierungsspeicherorte.
Opello
1
Das ist fast das, wonach ich suche ... wenn es eine Möglichkeit gäbe, auch die WM_SETTINGCHANGE von cmd.exe zu senden.
René Nyffenegger
0

Es ist einfach, den Pfad im aktuellen Prozess cmd.exe zu ändern:

PATH c:\MyNewDirectory;%PATH%

Sie können jederzeit HELP PATH ausführen, um Hilfe zum Befehl PATH zu erhalten.

jdigital
quelle
1
Ist das nicht nur gut für die Sitzung?
JL.
Ja, dies bleibt nicht über Sitzungen hinweg bestehen.
John T
JL hat recht und ich suchte nach einer dauerhaften Lösung. Ich habe meine Frage entsprechend bearbeitet.
René Nyffenegger
0

Für wirklich dauerhafte, systemweite Änderungen möchten Sie unbedingt die Systemsteuerung verwenden (auch bekannt als Arbeitsplatz -> Eigenschaften -> Erweitert -> Umgebungsvariablen für WinXP). Die Einstellungen dort wirken sich auf Ihr gesamtes System aus, einschließlich der GUI-Programme in der Explorer-Shell.

Wenn Sie diese Änderungen nur in der cmd.exeShell benötigen , können Sie eine Batchdatei ausführen, die sie beim Starten eines cmd.exe-Fensters festlegt. In der Antwort von Phoshi wird das erwähnt HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun, was eine ausgezeichnete Option zu sein scheint - es ist einfach, kleine Änderungen an der Kommandozeile vorzunehmen und sie bei Bedarf erneut auszuführen. Dies hat jedoch keine Auswirkungen auf GUI-Fenster oder die Explorer-Shell.

Tatsächlich wundert es mich, dass Sysinternals kein geeignetes Dienstprogramm hat, um dies zu tun. Vielleicht kann es ein anderer PStool tun?

Quacksalber
quelle
0

Viele Möglichkeiten, dies zu tun. REG ADD ist eins oder REG IMPORT (unter Verwendung einer exportierten .REG-Datei von einem anderen Computer). SETX / M ist eine andere. Sie können es auch mithilfe der Gruppenrichtlinieneinstellungen veröffentlichen (der einfachste Weg für eine große Anzahl von Computern).

Skatterbrainz
quelle
0

Ein anderer hier nicht erwähnter Gedanke ist das Erstellen eines Autohotkey-Skripts, mit dem das Control Panel gestartet und für Sie aufgerufen wird. Es funktioniert gut, wenn Sie bereits AHK-Benutzer sind :-)

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

Was ist auch mit der Bearbeitung von hklm / system / currentcontrolset001 / control / session manager / environment: path key? Derselbe Schlüssel befindet sich jedoch unter hklm / system / currentcontrolset002 und hklm / system / currentcontrolset. Es scheint, dass dies hier richtig sein könnte: /programming/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

Justin Goldberg
quelle