An die System-PATH-Variable anhängen, ohne die PATH-Variable des Benutzers einzuschließen

An die System-PATH-Variable anhängen, ohne die PATH-Variable des Benutzers einzuschließen

Stellen Sie sich die folgenden Umgebungsvariablen vor:

SystemPATH = C:\Windows
BobsBenutzerPFAD =C:\Users\Bob

In einer Eingabeaufforderung gibt der PATHBefehl zurückC:\Windows;C:\Users\Bob

Nach dem Rennensetx /m PATH "C:\Node;%PATH%"
SystemPFAD =C:\Node;C:\Windows;C:\Users\Bob

In einer neuen Eingabeaufforderung gibt der PATHBefehl zurückC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Bob

Eine andere Benutzerin, Alice, meldet sich an
.BenutzerPFAD =C:\Users\Alice

In einer Eingabeaufforderung gibt der PATHBefehl zurückC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice

Bob hat einen doppelten Pfad in seiner PATHVariable und Alice hat Bobs Pfade in ihrer PATHVariable.

Gibt es eine Möglichkeit, das System anzuhängen, PATHohne es mit den Daten des aktuellen Benutzers zu verunreinigen PATH?

Antwort1

In Windows 7 können Sie den Systempfad mit

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path

Wenn das unter Windows 8 immer noch funktioniert, verwenden Sie es, um den neuen Wert zu erstellen.

Sie müssen herausfinden, wie Sie die Ausgabe von analysieren reg query. Hier ist etwas, das funktionieren könnte:

für /f "tokens=1,2*" %a in (' reg query "HKLM\…\Environment" /v path ') setze currentValue=%c

Wo

  • Die Zeichenfolge ist der (oben angegebene) Befehl in einfachen Anführungszeichen.'reg query "HKLM\…\Environment" /v path'reg query
  • a, currentValue, und csind Variablennamen. Sie können beliebige Variablennamen wählen, mit der Einschränkung, dass aund die ceinzelne Buchstaben sein müssen, zwischen denen zwei Buchstaben liegen (Sie könnten z. B. nund p, oder xund verwenden z).
  •                             for /f "options" %variable in ('command1') do command2
    führt aus , analysiert die Ausgabe, weist den (s) Wert(e) zu ( , oben; siehe aber auch unten) und führt aus .command1%variable%acommand2
  • tokens=1,2*bedeutet, dass %adas erste Token (Wort) jeder (verbleibenden) Zeile abgerufen wird, %bdas zweite Wort abgerufen wird und %cder Rest der Zeile abgerufen wird.

    • Das erste Wort ist path(der Wertname).
    • Das zweite Wort ist REG_EXPAND_SZ(der Werttyp).
    • Der Rest der Zeile ist der Wert.

    (Sie können einfach tokens=2*und dann verwenden currentValue=%b.)

Nachdem Sie die obigen Schritte ausgeführt haben, sollten Sie in der Lage sein,

setx PATH "C:\Node;%currentValue%" /m
  • Wenn Sie dies in einem Skript (einer .BATDatei) tun, verwenden Sie %%aund %%c.
  • Testen Sie dies unbedingt mit echoBefehlen, bevor Sie es mit tun setx.

Antwort2

Geben Sie Bobs spezifischen Pfad nicht in den Systempfadwert ein, der von allen verwendet wird.

Lesen Sie den alten Wert des Systempfads, ändern Sie ihn und legen Sie den neuen Wert fest. Wenn cmd.exeder Befehl diese Funktionen nicht bereitstellt (anscheinend setkann er erstellen/ändern/löschen, aber nicht lesen), fügen Sie ihn in ein Programm ein, das von der Batchdatei aufgerufen wird.

Der Systempfadwert wird über die Registrierung gefunden (und geändert). Ich suche einfach nach dem Wert, von dem ich weiß, dass er vorhanden ist, um herauszufinden, wo genau er ist, und google dann diesen Schlüsselpfad, um zu überprüfen, was darüber gesagt wurde.
(später: das sind HKLM\System\CurrentControlSet\Control\Session Manager\Environmentund HKCU\Environment)

Jede fortgeschrittenere Skriptsprache für Windows oder mit Windows-API-Unterstützung kann damit umgehen. Oder ein kompiliertes, ausführbares Programm in der Sprache Ihrer Wahl.

Die CMD ErsatzschaleDas Kommando übernehmenhat eine @REGQUERY-Funktion:

echo %@REGQUERY["HKLM_64\System\CurrentControlSet\Control\Session Manager\Environment\Path"]

da es so klingt, als ob Sie eine bestimmte Maschine im Sinn haben, können Sie installierenTCC/LE (kostenlos)und verwenden Sie es, um Ihre Batchdatei zu interpretieren.

verwandte Informationen