Manipulation mit Benutzer- und Systemumgebungsvariablen über die Befehlszeile in Windows 10

Manipulation mit Benutzer- und Systemumgebungsvariablen über die Befehlszeile in Windows 10

Ich habe die folgenden Befehle verwendet, um Benutzer-/Systemumgebungsvariablen festzulegen/zu entfernen:

SYSTEM:

setx -m PATH "%PATH%C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;"

BENUTZER:

setx VAR1 "CONTENT OF VAR1"

Später habe ich diese Einschränkungen festgestellt:

  1. Wenn es %PATH%zu lang ist, erhalte ich folgende Warnung und die %PATH%Variable wird abgeschnitten:

ACHTUNG: Die gespeicherten Daten werden auf 1024 Zeichen gekürzt.

  1. In der Hilfe zum setxBefehl heißt es:

Wenn Sie Setx.exe verwenden, um einen Umgebungsvariablenwert zu löschen, ist der Umgebungsvariablenname nicht betroffen

Das heißt wenn ich setx -m OCVLIBDIR ""es ausführe wird es OCVLIBDIRnicht gelöscht sondern geleert.

Wie kann ich diese Einschränkungen überwinden?

PS: Ich bevorzuge Tools, die Teil von Windows 10 sind (z. B. PowerShell), aber es ist kein Problem, auch Tools von Drittanbietern zu verwenden (obwohl mir das übertrieben erscheint).

PPS: Ich weiß, dass es möglich ist, Variablen über die Windows-GUI, Register oder einige GUI-Tools von Drittanbietern zu bearbeiten, aber ich bevorzuge Skripte, weil ich mehrere Szenarien skripten und schnell zwischen ihnen wechseln kann. Dies ist nützlich, wenn ich mit verschiedenen Bibliotheken auf meinem System experimentiere (z. B. verschiedene Versionen von OpenCV usw.).

Antwort1

Power Shell

Dieser TechNet-Artikelbeschreibt die Grundlagen.

Diese Antwortbeschreibt das Abrufen von System- vs. Benutzerumgebungsvariablen (was im ersten Artikel nur angedeutet wurde). "Machine"Für das System, "User"für den aktuellen Benutzer und "Process"für den aktuellen Prozess, der zum Abrufen der endgültigen System-/Benutzerkombination funktioniert.

Über die PowerShell-Verkettung wird gesprochen indiese Frage und ihre Antworten. Sie können Zeichenfolgen mithilfe +von zusammenstellen, verketten oder Ersetzungen wie in verwenden "{0} {1}" -f "Hello","World".

Klammern werden verwendet, um Konstrukte zu gruppieren.

Variablen sind nicht typisiert, nicht deklariert und beginnen mit $.

Wenn Sie alles zusammenfügen, erhalten Sie etwa Folgendes:

$path = [Environment]::GetEnvironmentVariable("PATH","User")
[Environment]::SetEnvironmentVariable("PATH",$path+";C:\Temp","User")

Oder als Einzeiler:

[Environment]::SetEnvironmentVariable("PATH",([Environment]::GetEnvironmentVariable("PATH","User"))+";C:\Temp","User")

Dieser Artikelbeschreibt, wie Umgebungsvariablen gelöscht werden ( $nullist eine spezielle Variable):

[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")

Auf diese Weise vorgenommene Änderungen an den Umgebungsvariablen sind global verfügbar.


CMD

reg.exekann Registrierungseinträge hinzufügen, ändern und löschen. Umgebungsvariablen befinden sich in der Registrierung.Diese Antwortspricht über die Verwendung regzum Löschen von Umgebungsvariablen.

Für Benutzerumgebungsvariablen:

reg DELETE HKCU\Environment /v envvarname

Für Systemumgebungsvariablen:

reg DELETE "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v envvarname

( HKCUist austauschbar mit HKEY_CURRENT_USER. HKLMist austauschbar mit HKEY_LOCAL_MACHINE.)

(Beachten Sie, dass CMDleere Umgebungsvariablen genauso behandelt werden wie nicht vorhandene Umgebungsvariablen. Ich verstehe jedoch, dass Sie versuchen, die Variable aus dem System zu löschen.)

verwandte Informationen