Перечислите все переменные окружения из командной строки

934

Можно ли перечислить все переменные среды из командной строки Windows?

Что-то эквивалентное PowerShell gci env:(или ls env:или dir env:).

Никола Коссу
источник
1
Может кто-нибудь поделиться решением PowerShell? Это должно быть будущее и все. Правильно?
Бруно Броноски
1
@BrunoBronosky PS решение включено в вопрос, и есть также ответ, повторяющий его =)
Jon
Для описания каждого см. Ss64.com/nt/syntax-variables.html
Сэмюэль Хармер

Ответы:

1354

Просто делать:

SET

Вы также SET prefixможете просмотреть все переменные с именами, начинающимися с prefix.

Например, если вы хотите читать только derbydb из переменных окружения, сделайте следующее:

set derby 

... и вы получите следующее:

DERBY_HOME=c:\Users\amro-a\Desktop\db-derby-10.10.1.1-bin\db-derby-10.10.1.1-bin
Джон
источник
7
Это побуждает меня к имени?
CMCDragonkai
53
@KevinMeredith: Все команды в оболочке Windows не чувствительны к регистру.
Джон
12
@CMCDragonkai вы используете powershell? Похоже, что он взломал сет с помощью одной из команд. Это одна из его менее полезных функций! Я задал вопрос об отключении этого здесь
JonnyRaa
3
Может кто-нибудь обновить это, чтобы включить решение PowerShell? Это должно быть будущее и все. Правильно?
Бруно Броноски
3
@NickTimmer, поскольку вы говорите с bash вместо оболочки Windows, это неправильный вопрос / ответ для вас. Посмотрите printenv.
Джон
167

У Джона есть правильный ответ, но немного подробнее рассмотрим синтаксический сахар.

SET | more

позволяет видеть переменные по одной странице за раз, а не всю партию, или

SET > output.txt

отправляет вывод в файл output.txt, который вы можете открыть в блокноте или что-то еще ...

Fetchez la vache
источник
7
я понятия не имел, что moreсуществует на Windows, +1
ardnew
на самом деле он встроен в некоторые функции. Dir например будет страница с / р.
Джон Лорд
@ardnew: Теперь вы знаете больше ;-)
user2943111
107

Чтобы получить список всех переменных среды в PowerShell:

Get-ChildItem Env:

Или как предложено user797717, чтобы избежать усечения вывода:

Get-ChildItem Env: | Format-Table -Wrap -AutoSize

Источник: Создание и изменение переменных среды ( совет недели по Windows PowerShell )

user52028778
источник
4
Даже если я не использую PowerShell, потому что он не работает для каждой команды cmd, это единственное решение для красивой печати (на 2 столбца) без больших усилий. Чтобы добиться такого же поведения в cmd, вам нужно что-то вроде этого, for /f "tokens=1,2 delims==" ...которое становится очень сложным ...
ROMANIA_engineer
6
Чтобы избежать усечения вывода, я бы использовал следующее:Get-ChildItem Env: | Format-Table -Wrap -AutoSize
user797717
1
gci env:вместо этого Get-ChildItem Env:легче запомнить
Мэтсон Кепсон
Отлично! Я не понимаю, почему это не лучший ответ, если честно: / РЕДАКТИРОВАТЬ: Ой, подождите, я понимаю, почему ... оригинальный вопрос был не о том, как сделать это в Powershell, а в старой школе Командная подсказка: D
Йори Ван Нойвербург
79

Просто беги setот cmd.

Отображает, устанавливает или удаляет переменные среды. При использовании без параметров set отображает текущие настройки среды.

Грант Томас
источник
11

Вы можете использовать SETв CMD

Чтобы показать текущую переменную, SETдостаточно

Чтобы показать определенную переменную, такую ​​как «PATH», используйте SET PATH.

Для справки введите set /?.

Бойс Филд
источник
2
Чем это отличается от существующих ответов?
Питер Мортенсен,
7

Не теряй время Ищите его в реестре:

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

возвращает меньше, чем команда SET.

Павел Пивовар
источник
2
хотя это может быть правдой, одно отличие состоит в том, что запрос реестра возвращает нерасширенные REG_EXPAND_SZключи. Например, reg query "HKCU\Environment"показывает мне, что моя %TEMP%переменная зависит от значения %USERPROFILE%, поэтому, если это значение изменится, то изменится и значение для %TEMP%. Напротив, SETпросто возвращается"C:\Users\mpag\AppData\Local\Temp"
mpag
1
Почему вы говорите «не теряйте время»? Разве запись "set" в командной строке не быстрее, чем "reg query ..."?
Александр Хуат
4

Если вы хотите увидеть переменную среды, которую вы только что установили, вам нужно открыть новое командное окно.

Переменные, заданные с помощью переменных setx, доступны только в будущих окнах команд, но не в текущем окне команд. ( Setx, Примеры )

капитан пьюджет
источник
4

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

set [environment_variable] чтобы получить конкретную переменную со своим значением.

set [environment_variable]= может использоваться для удаления переменной из рабочей области.

Абхишек Гурджар
источник
1
Да, но как это отвечает на вопрос?
Питер Мортенсен