ChatGPT解决这个技术问题 Extra ChatGPT

从命令行列出所有环境变量

是否可以从 Windows 的命令提示符列出所有环境变量?

相当于 PowerShell 的 gci env:(或 ls env:dir env:)的东西。

有关每个的说明,请参阅 ss64.com/nt/syntax-variables.html

P
Peter Mortensen

做就是了:

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

这提示我输入名字?
@KevinMeredith:Windows shell 中的所有命令都不区分大小写。
@CMCDragonkai 你在使用 powershell 吗?似乎它已经使用它的一个 command-let 劫持了 set。这是它不太有用的功能之一!我问了一个关于禁用此 here 的问题
有人可以更新它以包含 PowerShell 解决方案吗?它应该是未来和一切。正确的?
这不能保证有效。这需要启用命令扩展。默认情况下,它们在较新的窗口上启用,但在较旧的窗口上不启用,并且可以将其关闭。
P
Peter Mortensen

乔恩有正确的答案,但要详细说明一些语法糖..

SET | more

使您能够一次查看一页的变量,而不是全部,或者

SET > output.txt

将输出发送到文件 output.txt,您可以在 Notepad 中打开该文件或其他...


我不知道 Windows 上存在 more,+1
它实际上也内置于某些功能中。例如,Dir 将使用 /p 进行分页。
P
Peter Mortensen

列出 PowerShell 中的所有环境变量:

Get-ChildItem Env:

或按照 user797717 的建议避免输出截断:

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

来源:Creating and Modifying Environment VariablesWindows PowerShell 本周提示


即使我不使用 PowerShell,因为它不适用于每个 cmd 命令,但这是唯一无需付出很大努力即可进行漂亮打印(在 2 列上)的解决方案。要在 cmd 中实现相同的行为,您需要像 for /f "tokens=1,2 delims==" ... 这样变得非常复杂的东西......
为避免输出被截断,我将使用以下内容:Get-ChildItem Env: | Format-Table -Wrap -AutoSize
gci env: 而不是 Get-ChildItem Env:,更容易记住
完美的!老实说,我不明白为什么这不是最佳答案:/ 编辑:哦,等等,我明白为什么......最初的问题不是关于如何在 Powershell 中做到这一点,而是在老派命令提示符:D
G
Grant Thomas

只需从 cmd 运行 set

显示、设置或删除环境变量。不带参数使用,set 显示当前环境设置。


这些天(在 2021 年)似乎不起作用Name' 因为它是一个空数组。 `
set 在 cmd 中运行,而不是 Powershell @JayKilleen
B
Boyce Field

您可以在 cmd 中使用 SET

要显示当前变量,只需 SET 就足够了

要显示某些变量,例如“PATH”,请使用 SET PATH

如需帮助,请键入 set /?


这与现有答案有何不同?
H
Hrishikesh Kadam

非扩展变量 -

用户变量 -

reg query HKEY_CURRENT_USER\Environment

系统变量 -

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

扩展变量 -

在 CMD -

SET

在 Powershell 中 -

来源 - https://devblogs.microsoft.com/scripting/powertip-use-windows-powershell-to-display-all-environment-variables/

dir env:

set 本身不适用于 Github Actions,但 reg query 可以!
P
Peter Mortensen

不要浪费时间。在注册表中搜索它:

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

返回小于 SET 命令。


虽然这可能是真的,但一个区别是注册表查询返回未扩展的 REG_EXPAND_SZ 键。例如 reg query "HKCU\Environment" 显示我的 %TEMP% 变量取决于 %USERPROFILE% 的值,因此如果该值发生变化,%TEMP% 的值也会发生变化。相反,SET 只返回 "C:\Users\mpag\AppData\Local\Temp"
为什么说“不要浪费时间”?在命令提示符下写“set”不是比“reg query ...”更快吗?
P
Peter Mortensen

如其他答案中所述,您可以使用 set 列出所有环境变量或使用

set [environment_variable] 获取特定变量及其值。

set [environment_variable]= 可用于从工作区中删除变量。


是的,但这如何回答这个问题?
P
Peter Mortensen

如果要查看刚刚设置的环境变量,需要打开一个新的命令窗口。

使用 setx 变量设置的变量仅在未来的命令窗口中可用,在当前命令窗口中不可用。 (Setx,示例)