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:
- 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.
- In der Hilfe zum
setx
Befehl 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 OCVLIBDIR
nicht 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 ( $null
ist eine spezielle Variable):
[Environment]::SetEnvironmentVariable("MyTestVariable",$null,"User")
Auf diese Weise vorgenommene Änderungen an den Umgebungsvariablen sind global verfügbar.
CMD
reg.exe
kann Registrierungseinträge hinzufügen, ändern und löschen. Umgebungsvariablen befinden sich in der Registrierung.Diese Antwortspricht über die Verwendung reg
zum 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
( HKCU
ist austauschbar mit HKEY_CURRENT_USER
. HKLM
ist austauschbar mit HKEY_LOCAL_MACHINE
.)
(Beachten Sie, dass CMD
leere Umgebungsvariablen genauso behandelt werden wie nicht vorhandene Umgebungsvariablen. Ich verstehe jedoch, dass Sie versuchen, die Variable aus dem System zu löschen.)