So aktualisieren Sie die Umgebungsvariable PATH über die Befehlszeile

12

Ich habe eine System-PATH-Variable mit der Konfiguration auf Systemebene. Ich verwende die Benutzer-PATH-Variable, um den PATH durch eine benutzerspezifische Konfiguration zu ergänzen.

Ich möchte die Benutzer-PATH-Variable über die Befehlszeile beispielsweise mit setx aktualisieren.

Ich weiß jedoch nicht, wie ich auf den vorhandenen Benutzerpfad in setx verweisen soll.

Im folgenden Befehl (setx ohne / M)

setx PATH c:\my-user-specifc-bin-path;%PATH%

Der erste PATH bedeutet Benutzer PATH, aber der zweite% PATH% wird durch den "vollständigen" (Benutzer + System) PATH ersetzt.

Das bedeutet also, dass der gesamte Systempfad im Benutzerpfad dupliziert wird ... was definitiv nicht das ist, was ich will.

Ich würde gerne:

  • Betrifft nur die Umgebungsvariable PATH des Benutzers
  • Fügen Sie ein oder mehrere Pfadelemente an den vorhandenen Wert an
  • Mach es über die Kommandozeile.
Christian Lemer
quelle
Mir scheint, wenn Sie verwenden ;%PATH%, möchten Sie, dass der vorhandene Pfad (abgeleitet vom Systempfad) angehängt wird.
Daniel R Hicks

Antworten:

3

PowerShell-Version, PATH für Benutzer festlegen:

  1. Neuen PATH (überschreiben) für aktuellen Benutzer festlegen:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1"
  1. Set an aktuellen Benutzerpfad anhängen:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path);C:\MyPath1"
  1. Stellen Sie das Präfix auf den aktuellen Benutzerpfad ein:
PS> Set-ItemProperty -path HKCU:\Environment\ -Name Path -Value "C:\MyPath1;$((Get-ItemProperty -path HKCU:\Environment\ -Name Path).Path)"
Tho Ho
quelle
12

So legen Sie fest, dass der Benutzerpfad alle vorherigen Werte überschreibt:

setx PATH "C:\MyPath1"

So stellen Sie dem vorhandenen Benutzerpfad einen Wert "C: \ MyPath0" voran:

for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "C:\MyPath0;%~a" ) else ( @setx PATH "C:\MyPath0;%~a %~b" )

So hängen Sie einen Wert "C: \ MyPath2" an den vorhandenen Benutzerpfad an:

for /f "skip=2 tokens=3*" %a in ('reg query HKCU\Environment /v PATH') do @if [%b]==[] ( @setx PATH "%~a;C:\MyPath2" ) else ( @setx PATH "%~a %~b;C:\MyPath2" )

Die if-else-Bedingung ist erforderlich, da der Benutzerpfad Leerzeichen enthalten kann oder nicht. Wenn Sie möchten, können Sie die Befehle als generische Batchdateien speichern (verdoppeln Sie jedes% -Zeichen), die den Wert akzeptieren, der als Argument festgelegt / vorangestellt / angehängt werden soll.

Batch-Datei

:: PATH-ADD - add a path to user path environment variable

@echo off
setlocal

:: set user path
set ok=0
for /f "skip=2 tokens=3*" %%a in ('reg query HKCU\Environment /v PATH') do if [%%b]==[] ( setx PATH "%%~a;%1" && set ok=1 ) else ( setx PATH "%%~a %%~b;%1" && set ok=1 )
if "%ok%" == "0" setx PATH "%1"

:end
endlocal
echo.
Karan
quelle
1
Weitere Erklärung erforderlich. Was ist% a, was ist% b?
OfusJK
Leider funktioniert es nicht, wenn der Benutzer PATH nicht bereits definiert ist :(
nowox
@KJK: for /?wird dir alles sagen, was du wissen musst. :) Ich wollte hier nicht alles unnötig replizieren und dachte, dass Informationen sowieso leicht herauszufinden wären.
Karan
Der Code prüft nicht, ob der Benutzer PATH bereits mit einem Semikolon endet. In diesem Fall sollte das Anhängen des übergebenen Verzeichnisses ohne ein zusätzliches Semikolon erfolgen. Aber das größte Problem mit diesem Code ist eine Verballhornung des Benutzers PATH , wenn die Zeichenfolge länger als 1024 Zeichen wegen setx Verkürzungen der Zeichenfolge auf 1024 Zeichen mit einer entsprechenden Anzeige von Informationen , bevor es an Windows - Registrierung hinzufügen. Es kann also vorkommen, dass der vorhandene Benutzer anstelle des übergebenen Verzeichnisses PATHdurch diesen Code abgeschnitten (verstümmelt) wird.
Mofi
4

müssen SETX /M, Standard auf SETXeingestelltHKEY_CURRENT_USER

SETX /M PATH c:\my-bin-path;%PATH%
STTR
quelle
Dies wirkt sich auf die System-PATH-Variable aus ... Vielleicht war mein Beispiel irreführend, aber ich möchte die Benutzer-PATH-Variable speziell aktualisieren.
Christian Lemer
@ Chris op111.net/82
STTR
1

Das scheint zu funktionieren:

setx PATH "c:\my-user-specifc-bin-path-which-may-contain-spaces;"%%PATH%%
rsphillips
quelle
Es ist ein absolutes NO GO, NIEMALS Benutzer oder System PATH mit local zu aktualisieren PATH. Diese Befehlszeile beschädigt den Benutzer wirklich, PATHindem sie im besten Fall die Zeichenfolge zur Windows-Registrierung für den Benutzer hinzufügt . Jeder Benutzer dieser Befehlszeile hat die Benutzereinstellung erfolgreich beschädigt und ist so lokal, wie sie von allen Prozessen verwendet wird, die nach dem Windows-Neustart oder der Abmeldung / Anmeldung mit dem aktuellen Benutzerkonto ausgeführt werden. PATHc:\my-user-specifc-bin-path-which-may-contain-spaces;%C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;% PATH PATH
Mofi