Globale vs Benutzer Windows-Umgebungsvariablen

4

Ich muss verstehen, wie globale gegen Benutzervariablen in den Fenstern arbeiten.

Fall 1: Wenn dieselbe Variable im Benutzer- und im globalen Abschnitt definiert ist, wie ist das Verhalten? Ich habe z. B. eine Variable% PATH% entweder im Benutzer- oder im globalen Bereich definiert und sehe nur den globalen Wert. Gibt es eine Möglichkeit, den Benutzer PATH an den globalen PATH anzuhängen ?

Fall 2: Die im Benutzerabschnitt definierten Variablen werden im globalen Abschnitt nicht "aufgelöst" . Wenn ich den SETBefehl verwende, wird eine Liste aller definierten Variablen ( Benutzer und global ) angezeigt, 'Querverweise' werden jedoch nicht aufgelöst.

Z.B

im benutzerbereich definiere ich:

VAR1=test-user 

im globalen abschnitt definiere ich:

VAR2=%VAR1%-more;%VAR3%-more
VAR3=test-global 

mit SETsehe ich:

...
VAR1=test-user
VAR2=%VAR1%-more;test-global-more
VAR3=test-global
...

Ich verwende eine Windows 7 x64-Box.

Ausgehend von den obigen Tests sind meine Schlussfolgerungen:

  • globale Variablen überschreiben Benutzervariablen (bei gleichem Namen ist nur global gültig)
  • Es ist kein Querverweis zwischen Benutzer- und globalen Variablen zulässig

Habe ich recht?

Andrea Colleoni
quelle
Kann ich davon ausgehen, dass Sie eine Batch-Datei schreiben?
Dave
@ Martineau Was ich oben geschrieben habe, sind meine Tests. Ich nehme ein Verhalten an, das ich in einem Update zu meiner Frage hinzugefügt habe, aber ich weiß nicht, ob dies eine korrekte Interpretation meiner Tests ist.
Andrea Colleoni
@Nein, ich konfiguriere Windows manuell über "Systemsteuerung> System und Sicherheit> System" und starte dann bei jeder Änderung eine CMD-Sitzung neu.
Andrea Colleoni
Um einen Teil der Frage zu beantworten, bin ich mir ziemlich sicher, dass Benutzer-VARs auf System-VARs verweisen können.
Martineau

Antworten:

5

Ihre Schlussfolgerungen stimmen zumindest nach meinen Tests nicht ganz.

  • Benutzervariablen können auf (globale) Systemvariablen verweisen.

    Systemvariablen können nicht auf Benutzervariablen verweisen.

  • Benutzervariablen überschreiben die (globalen) Systemvariablen.

    Nur in der Standardeinstellung werden TEMP(und TMP) als Benutzervariable %USERPROFILE%\AppData\Local\Tempund gleichzeitig als Systemvariable definiert C:\Windows\TEMP.

    PATHDies scheint ein Sonderfall zu sein, bei dem die Benutzervariable PATH(falls definiert) immer an die Systemvariable angehängt wird, anstatt sie zu überschreiben.

Bob
quelle
Meine Tests bestätigen alles andere als eines: Der PATH des Benutzers wird nicht an den PATH des globalen Benutzers angehängt, sondern von diesem überschrieben. In meiner Konfiguration sind sie in verschiedenen Groß- und Kleinschreibung geschrieben: es kommt darauf an?
Andrea Colleoni
@ AndreaColleoni Fall sollte keine Rolle spielen. Wenn ich eine Benutzervariable mit dem Namen PATH(oder path) mit dem Wert erstelle C:\test, speichere (drücke OK), öffne eine neue Eingabeaufforderung und tippe echo %path%, C:\testerscheint am Ende.
Bob
Ich habe getan, wie du gesagt hast. Ich habe auch den PATH des Benutzers in USER_PATH umbenannt und festgestellt, dass dem PATH des Globals automatisch USER_PATH vorangestellt wird. Wenn ich die beiden PATH-Werte verlasse, sehe ich nur den globalen Wert von PATH.
Andrea Colleoni
@ AndreaColleoni USER_PATHhat für mich keine besondere Bedeutung. Ihr System kann sich aus irgendeinem Grund von meinem unterscheiden ... Könnte jemand es auf die eine oder andere Weise versuchen und bestätigen?
Bob