Wie werden globale Umgebungsvariablen getrennt von benutzerspezifischen Umgebungsvariablen aufgelistet?

13

In Windows (z. B. Version 10) können Sie Umgebungsvariablen mit dem Befehl auflisten

set

Wie listen Sie nur die Umgebungsvariablen auf, die für alle Benutzer gleich sind, oder nur die Umgebungsvariablen, die für den aktuellen Benutzer oder die aktuelle Sitzung gelten?

RedGrittyBrick
quelle

Antworten:

17

Die Dinge sind etwas komplizierter, als Microsoft es manchmal erscheinen lässt.

Viele der Umgebungsvariablen sind in der Registrierung gespeichert. Dies bedeutet, dass Sie sie mit dem regBefehl abfragen können

Allen Benutzern gemeinsam

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

Spezifisch für die aktuelle Benutzersitzung

reg query HKCU\Environment
reg query "HKCU\Volatile Environment"

Vom Benutzer festgelegt

Wenn Sie Ihre eigene Umgebungsvariable mit dem setx variable valueBefehl dauerhaft festlegen , wird sie in der Registrierung gespeichert, aber nicht sofort verfügbar gemacht.

C:\>setx test removeme

SUCCESS: Specified value was saved.

C:\>reg query "HKCU\Environment"

HKEY_CURRENT_USER\Environment
    Path    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
    TEMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    TMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    test    REG_SZ    removeme

Wenn Sie den set variable=valueBefehl verwenden, ist die Variable sofort verfügbar, wird jedoch nicht in der Registrierung gespeichert. Sie können den regBefehl nicht verwenden, um sie aufzulisten, obwohl sie von angezeigt werden set. Diese temporären Umgebungsvariablen bleiben nach dem Beenden der Eingabeaufforderungssitzung nicht bestehen.

Dynamische Umgebungsvariablen

Es gibt Konstrukte, die sich wie Umgebungsvariablen verhalten, die auf diese Weise nicht in der Registrierung gespeichert sind. Zum Beispiel:

echo %TIME%
RedGrittyBrick
quelle
1
Nur eine Kuriosität: ist es möglich , aktualisieren die Variable vorher hinzugefügt Registrierung? zB setx test removemedann etwas, set test %test%damit Sie alle Variablen mit einem einfachen auflisten können set? Ich dachte, dass es möglich ist, ein Befehls- / Batch-Skript zu implementieren, um alle auf Anfrage explizit zu machen ...
Hastur
@Hastur: Ja, das würde funktionieren, um eine neue Variable sowohl sofort verfügbar als auch persistent zu machen.
RedGrittyBrick
@hastur @RedGrittyBrick - es ist möglich, aber definitiv kein Oneliner in Windows Cmd. Wenn Sie schokoladig installieren, hat es ein refreshenv.cmdDienstprogramm, das aus 10 Codezeilen besteht, und im Grunde fragt es Registrierungseinträge ab und aktualisiert sie
maoizm
Zeigt der SETBefehl dynamische Umgebungsvariablen an? Ich versuche, alles zu finden, was die Build Tools von Microsoft während einer Sitzung festgelegt haben. Ich möchte nur meine Grundlagen abdecken.
Ungeheuer
1

Verwenden Sie für eine saubere Ausgabe ohne zusätzliche Zeilen und Leerzeichen die folgenden Befehle in cmd.exe:

Benutzerumgebungsvariablen:

FOR /F "tokens=1,3* skip=2" %G IN ('reg query HKCU\Environment') DO @echo %G=%H %I

Globale (System-) Umgebungsvariablen:

FOR /F "tokens=1,3* skip=2" %G IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"') DO @echo %G=%H %I

Es funktioniert unter Windows 7-10 und höchstwahrscheinlich auch in früheren Versionen.

Maoizm
quelle
Danke dafür. Beachten Sie, dass ein Teil des Werts gelöscht wird, wenn Leerzeichen enthalten sind. Ein Registrierungseintrag wie VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools wird also als gerecht angezeigt VS140COMNTOOLS=C:\Program.
Metall
@metal danke für die Meldung dieses Eckfalls. Fühlen Sie sich frei, die Antwort zu bearbeiten, wenn Sie eine Problemumgehung für Leerzeichen finden - ich habe jetzt keine Windows-Computer
maoizm
Ich habe ein entsprechendes Update eingereicht. Sie oder ein Mod müssen es genehmigen.
Metall
1

Geben Sie den Stapelbefehl ein: echo% temp%

Wenn die Umgebungsvariable "temp" "H: \ Users \ amacm \ AppData \ Local" enthält, antwortet Windows sofort wie folgt:

H: \ Benutzer \ amacm \ AppData \ Local

Wenn keine Umgebungsvariable mit dem Namen "temp" vorhanden ist, antwortet Windows wie folgt:

% temp%

Art McDonald
quelle