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.

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)"

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.

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%

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%%

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.