如何将全局环境变量与用户特定的环境变量分开列出?

Red*_*ick 14 command-line environment-variables

在 Windows(例如版本 10)中,您可以使用以下命令列出环境变量

set
Run Code Online (Sandbox Code Playgroud)

你如何只列出所有用户都相同的环境变量,或者只列出当前用户或会话的环境变量?

Red*_*ick 19

事情比微软有时看起来要复杂一些。

许多环境变量存储在注册表中。这意味着您可以使用reg命令查询它们

所有用户通用

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Run Code Online (Sandbox Code Playgroud)

特定于当前用户会话

reg query HKCU\Environment
reg query "HKCU\Volatile Environment"
Run Code Online (Sandbox Code Playgroud)

用户设置

如果您使用该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
Run Code Online (Sandbox Code Playgroud)

如果您使用该set variable=value命令,该变量将立即可用,但不会存储在注册表中。reg尽管它们由 显示,但您不能使用该命令列出它们set。在您结束命令提示符会话后,这些临时环境变量不会保留。

动态环境变量

有一些构造就像环境变量一样不以这种方式存储在注册表中。例如:

echo %TIME%
Run Code Online (Sandbox Code Playgroud)

  • 只是好奇:是否可以_刷新_先前添加到注册表中的变量?例如`setx test removeme` 然后是`set test %test%` 以便您可以使用简单的`set` 列出所有变量?我在想有可能实现一个命令/批处理脚本来根据要求使它们全部显式...... (2认同)