Stellen Sie sich die folgenden Umgebungsvariablen vor:
SystemPATH = C:\Windows
BobsBenutzerPFAD =C:\Users\Bob
In einer Eingabeaufforderung gibt der PATH
Befehl 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 PATH
Befehl 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 PATH
Befehl zurückC:\Node;C:\Windows;C:\Users\Bob;C:\Users\Alice
Bob hat einen doppelten Pfad in seiner PATH
Variable und Alice hat Bobs Pfade in ihrer PATH
Variable.
Gibt es eine Möglichkeit, das System anzuhängen, PATH
ohne 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
, undc
sind Variablennamen. Sie können beliebige Variablennamen wählen, mit der Einschränkung, dassa
und diec
einzelne Buchstaben sein müssen, zwischen denen zwei Buchstaben liegen (Sie könnten z. B.n
undp
, oderx
und verwendenz
).-
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
%a
command2
tokens=1,2*
bedeutet, dass%a
das erste Token (Wort) jeder (verbleibenden) Zeile abgerufen wird,%b
das zweite Wort abgerufen wird und%c
der 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 verwendencurrentValue=%b
.)- Das erste Wort ist
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
.BAT
Datei) tun, verwenden Sie%%a
und%%c
. - Testen Sie dies unbedingt mit
echo
Befehlen, bevor Sie es mit tunsetx
.
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.exe
der Befehl diese Funktionen nicht bereitstellt (anscheinend set
kann 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\Environment
und 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.