Як перелічити глобальні змінні середовища окремо від змінних для певного користувача?


13

У Windows (наприклад, версія 10) ви можете перелічити змінні середовища за допомогою команди

set

Як ви перераховуєте лише змінні середовища, які однакові для всіх користувачів, або просто змінні середовища, які є для поточного користувача або сеансу?

Відповіді:


17

Речі дещо складніші, ніж інколи робить Microsoft.

У Реєстрі зберігається багато змінних середовищ. Це означає, що ви можете запитувати їх за допомогою regкоманди

Спільний для всіх користувачів

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

Характерно для поточного сеансу користувача

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

Встановити користувачем

Якщо ви постійно встановлюєте власну змінну середовища за допомогою setx variable valueкоманди, вона зберігається в реєстрі, але не стає одразу доступною.

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

Якщо ви використовуєте set variable=valueкоманду, змінна доступна негайно, але не зберігається в реєстрі. Ви не можете використовувати regкоманду для їх переліку, хоча вони показані set. Ці тимчасові змінні середовища не зберігаються після завершення сеансу командного рядка.

Динамічні змінні середовища

Є конструкції, які діють як змінні середовища, які не зберігаються в реєстрі таким чином. Наприклад:

echo %TIME%

1
Просто цікавість: чи можна оновити змінну, попередньо додану до реєстру? наприклад, setx test removemeтоді щось, set test %test%щоб ви могли мати всі перелічені перелічені з простого set? Я думав, що можна реалізувати команду / пакетний скрипт, щоб зробити їх явними за запитом ...
Hastur

@Hastur: Так, це допоможе зробити нову змінну як негайно доступною, так і стійкою.
RedGrittyBrick

@hastur @RedGrittyBrick - це можливо, але точно не є oneliner у Windows cmd. Якщо ви встановите chocolatey, він має refreshenv.cmdкорисну програму, яка становить 10 рядків коду, і в основному вона запитує та оновлює записи реєстру
maoizm

Чи SETпоказує команда динамічні змінні середовища? Я намагаюся знайти що-небудь, і все, що Інструменти побудови Microsoft встановлювали під час сесії, просто хочу покрити мої бази.
Ungeheuer

2

Для чистого виводу без зайвих рядків і чорних пробілів використовуйте наступні команди в cmd.exe:

Змінні середовища користувача:

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

Глобальні (системні) змінні середовища:

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

Він працює в Windows 7-10, і, швидше за все, і в більш ранніх версіях.


Дякую за це Зауважте, що воно скидає частину значення, якщо в ньому є пробіли. Таким чином, запис у реєстрі як би VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools відображається просто VS140COMNTOOLS=C:\Program.
метал

@metal дякую за повідомлення про цю кутову справу. Не соромтесь редагувати відповідь, якщо ви знайдете вирішення пробілів - у мене зараз немає комп'ютерів з Windows
maoizm

1
Я надіслав оновлення для цього. Вам або якомусь моді потрібно буде це затвердити.
метал

1

введіть команду batch: echo% temp%

Якщо змінна середовища "temp" містить "H: \ Users \ amacm \ AppData \ Local", Windows негайно відповість таким чином:

H: \ Користувачі \ amacm \ AppData \ Місцеві

Якщо немає змінної середовища з назвою "temp", Windows відповість наступним чином:

% темп.%

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.