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?
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:
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.
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:
setx test removeme
dann etwas,set test %test%
damit Sie alle Variablen mit einem einfachen auflisten könnenset
? Ich dachte, dass es möglich ist, ein Befehls- / Batch-Skript zu implementieren, um alle auf Anfrage explizit zu machen ...refreshenv.cmd
Dienstprogramm, das aus 10 Codezeilen besteht, und im Grunde fragt es Registrierungseinträge ab und aktualisiert sieSET
Befehl 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.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.
quelle
VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools
wird also als gerecht angezeigtVS140COMNTOOLS=C:\Program
.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%
quelle