Как составить список глобальных переменных среды отдельно от пользовательских переменных среды?


11

В Windows (например, версия 10) вы можете перечислить переменные среды, используя команду

set

Как вы перечисляете только переменные среды, которые являются одинаковыми для всех пользователей, или только переменные среды, которые предназначены для текущего пользователя или сеанса?

Ответы:


15

Все немного сложнее, чем иногда делает 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: Да, это будет работать, чтобы сделать новую переменную как доступной, так и постоянной.
RedGrittyBrick

@hastur @RedGrittyBrick - это возможно, но это определенно не единственное в Windows cmd. Если вы устанавливаете chocolatey, у него есть refreshenv.cmdутилита, которая состоит из 10 строк кода, и в основном она запрашивает и обновляет записи реестра
maoizm

SETПоказывает ли команда переменные динамической среды? Я пытаюсь найти что-нибудь и все, что Microsoft Build Tools установил во время сеанса, просто хочу охватить мои основы.
Ungeheuer

1

Для чистого вывода без лишних строк и пробелов используйте следующие команды 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
маоизм

Я представил обновление на этот счет. Вы или какой-то мод должны будете это одобрить.
металл

1

введите пакетную команду: echo% temp%

Если переменная среды «temp» содержит «H: \ Users \ amacm \ AppData \ Local», Windows немедленно ответит следующим:

H: \ Users \ amacm \ AppData \ Local

Если переменная среды с именем «temp» отсутствует, Windows ответит следующим образом:

% Temp%


Это не отвечает на вопрос, как отличить глобальные и пользовательские переменные.
Джон Хенниг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.