Jak wyświetlić globalne zmienne środowiskowe oddzielnie od zmiennych środowiskowych specyficznych dla użytkownika?

13

W systemie Windows (np. Wersja 10) można wyświetlić listę zmiennych środowiskowych za pomocą polecenia

set

Jak wyświetlić tylko zmienne środowiskowe, które są takie same dla wszystkich użytkowników, lub tylko zmienne środowiskowe, które są dla bieżącego użytkownika lub sesji?

RedGrittyBrick
źródło

Odpowiedzi:

17

Sprawy są nieco bardziej skomplikowane, niż Microsoft czasami wydaje się.

Wiele zmiennych środowiskowych jest przechowywanych w rejestrze. Oznacza to, że możesz wysłać do nich zapytanie za pomocą regpolecenia

Wspólne dla wszystkich użytkowników

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

Specyficzne dla bieżącej sesji użytkownika

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

Ustawiony przez użytkownika

Jeśli na stałe ustawisz własną zmienną środowiskową za pomocą setx variable valuepolecenia, zostanie ona zapisana w rejestrze, ale nie będzie natychmiast dostępna.

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

Jeśli użyjesz set variable=valuepolecenia, zmienna jest dostępna natychmiast, ale nie jest przechowywana w rejestrze. Nie można użyć regpolecenia, aby je wyświetlić, chociaż są one oznaczone symbolem set. Te tymczasowe zmienne środowiskowe nie są utrzymywane po zakończeniu sesji wiersza polecenia.

Dynamiczne zmienne środowiskowe

Istnieją konstrukty, które działają jak zmienne środowiskowe, które nie są przechowywane w rejestrze w ten sposób. Na przykład:

echo %TIME%
RedGrittyBrick
źródło
1
Ciekawostka: czy można odświeżyć zmienną wcześniej dodaną do rejestru? np. setx test removemewtedy coś set test %test%, co pozwala mieć wszystkie zmienne wymienione za pomocą prostego set? Myślałem, że możliwe jest zaimplementowanie skryptu polecenia / partii, aby wszystkie były wyraźne na żądanie ...
Hastur
@Hastur: Tak, to zadziałałoby, aby nowa zmienna była natychmiast dostępna i trwała.
RedGrittyBrick
@hastur @RedGrittyBrick - jest to możliwe, ale zdecydowanie nie jest oneliner w Windows cmd. Jeśli zainstalujesz Chocolatey, ma refreshenv.cmdnarzędzie, które ma 10 linii kodu i w zasadzie odpytuje i odświeża wpisy rejestru
maoizm
Czy SETpolecenie wyświetla dynamiczne zmienne środowiskowe? Próbuję znaleźć wszystko i wszystko, co narzędzia do kompilacji Microsoft ustawiają podczas sesji, chcę tylko pokryć moje bazy.
Ungeheuer,
2

Aby uzyskać czysty wynik bez dodatkowych linii i czarnych spacji, użyj następujących poleceń w cmd.exe:

Zmienne środowiskowe użytkownika:

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

Globalne (systemowe) zmienne środowiskowe:

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

Działa w systemie Windows 7-10, a prawdopodobnie także we wcześniejszych wersjach.

maoizm
źródło
Dzięki za to. Zauważ, że spada część wartości, jeśli ma spacje. Tak więc wpis rejestru VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools pokazuje się jako sprawiedliwy VS140COMNTOOLS=C:\Program.
metal
@metal dzięki za zgłoszenie tej sprawy narożnej. Czuć się swobodnie, aby edytować odpowiedź, jeśli można znaleźć obejście przestrzeni - Nie mam żadnych komputerów z systemem Windows teraz
maoizm
1
Przesłałem aktualizację w tym celu. Ty lub jakiś mod będziesz musiał to zatwierdzić.
metal
1

wpisz polecenie wsadowe: echo% temp%

Jeśli zmienna środowiskowa „temp” zawiera „H: \ Users \ amacm \ AppData \ Local”, system Windows natychmiast zareaguje następująco:

H: \ Users \ amacm \ AppData \ Local

Jeśli nie ma zmiennej środowiskowej o nazwie „temp”, system Windows zareaguje następująco:

% temp%

Art McDonald
źródło