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ą reg
polecenia
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 value
polecenia, 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=value
polecenia, zmienna jest dostępna natychmiast, ale nie jest przechowywana w rejestrze. Nie można użyć reg
polecenia, 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%
setx test removeme
wtedy cośset test %test%
, co pozwala mieć wszystkie zmienne wymienione za pomocą prostegoset
? Myślałem, że możliwe jest zaimplementowanie skryptu polecenia / partii, aby wszystkie były wyraźne na żądanie ...