Wie ändert man die PATH-Variable definitiv über die Befehlszeile in Windows

7

Ich möchte eine .bat-Datei erstellen, die am Ende des Werts der Windows-PATH-Variablen eine Zeichenfolge hinzufügen würde. Warnung, ich möchte, dass diese Änderung endgültig ist und nicht nur für die aktuelle Sitzung funktioniert.

Weiß jemand einen Weg, dies zu tun? So viel wie möglich sollte es nicht von der Windows-Version abhängig sein

    
madewulf 03.09.2010, 13:11
quelle

2 Antworten

18

Entschuldigung für die lange Antwort, aber eine kurze Antwort auf Ihre Frage ist unmöglich.

Zunächst sollten Sie verstehen, wie Umgebungsvariablen funktionieren. Es gibt einige Stellen in der Registrierung wie HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment und HKEY_CURRENT_USER\Environment , wo die Umgebungsvariablen gehalten werden. Beim Start liest das Betriebssystem diese Registrierungsschlüssel. Dann erstellt ein Windows-Prozess einen anderen Windows-Prozess. Der Elternprozess kann dem Client-Prozess einen Satz von Umgebungsvariablen geben. Wenn der übergeordnete Prozess dies nicht tut, erbt der untergeordnete Prozess Umgebungsvariablen der übergeordneten Prozesse.

Aktualisieren von Umgebungsvariablen eines laufenden Prozesses in Bezug auf WM_WININICHANGE oder WM_SETTINGCHANGE Nachrichten. Eine Windows-Anwendung kann diese Nachrichten interpretieren und die aktuellen Umgebungsvariablen aus der Registry HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment und HKEY_CURRENT_USER\Environment erneut lesen. So können Sie im Allgemeinen die Registrierungswerte unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment oder HKEY_CURRENT_USER\Environment ändern und senden

%Vor%

Es wäre viel besser, SendMessageTimeout anstelle von SendMessage , aber die Idee bleibt gleich. Das Problem ist, dass andere Prozesse nicht auf die Nachricht warten und etwas tun müssen. Die meisten Konsolenanwendungen haben keine Nachrichtenschleife und tun nichts, wenn Sie solche Nachrichten senden.

Es ist also wichtig zu verstehen, dass es eine no einfache Möglichkeit gibt, um Umgebungsvariablen aller Prozesse zu aktualisieren, ohne den Computer neu zu starten. Sie sollten dies klar verstehen und Ihre Frage ein wenig reduzieren.

Wenn Sie die Umgebung in der Registrierung aktualisieren und SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment") senden, werden neue verarbeitete Dateien, die von Explorer.exe erstellt wurden, neue Umgebungsvariablen enthalten, aber cmd.exe nicht Mach das.

Wenn Sie Umgebungsvariablen der aktuellen cmd.exe in einem Batch-Lauf aktualisieren möchten, können Sie Folgendes tun: Sie können eine neue CMD-Datei erstellen, zum Beispiel t.cmd im Verzeichnis% TEMP% Schreiben Sie in die Datei SET PATH=%PATH%;C:\BlaBla und verwenden Sie dann call %TEMP%\t.cmd und dell %TEMP%\t.cmd , um die Umgebungsvariablen der aktuellen cmd.exe zu aktualisieren.

Um genau zu sein, gibt es mehr Orte, die verwendet werden, um Umgebungsvariablen von neu erzeugten Prozessen zu erstellen. Dies sind Unterschlüssel der Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths und %SystemRoot%\System32\autoexec.nt Datei. Einer wird für Prozesse verwendet, die von ShellExecute und ShellExecuteEx (zum Beispiel Explorer.exe) erstellt wurden, und ein anderer für Konsolenanwendungen.

    
Oleg 03.09.2010, 15:41
quelle
4

Wenn Sie nur an neuen Prozessinstanzen interessiert sind und diese wirklich über eine Batchdatei ausgeführt werden sollen, dann ist setx genau das, wonach Sie suchen.

  • /M ändert PATH in HKEY_LOCAL_MACHINE anstelle von HKEY_CURRENT_USER .
    d.h. eine Systemvariable anstelle des Benutzers.
    Beispiel: SETX /M PATH "%PATH%;C:\your path with spaces"

Wenn Sie direkt eine Umgebungsvariable für gerade laufende Prozesse ändern wollen, nun ja, das ist kompliziert und anscheinend nicht empfohlen :

%Vor%

Ansonsten, wie Oleg sagt, programmatisch ist der beste Weg, die Registrierung zu ändern und WM_SETTINGCHANGE zu senden und zu hoffen, dass die Apps gut genug sind, um sie aufzuheben.

    
jrtipton 03.09.2010 15:56
quelle

Tags und Links