Windows 用户环境变量与系统环境变量

Posted

技术标签:

【中文标题】Windows 用户环境变量与系统环境变量【英文标题】:Windows user environment variable vs. system environment variable 【发布时间】:2015-08-20 22:22:36 【问题描述】:

在 Windows 中,是否有任何 shell/PowerShell 命令可以分别列出用户环境变量和系统环境变量?

如果我这样做-

SET TEMP

Windows 为TEMP 显示用户环境变量而不是系统变量。

我正在寻找一个 shell 命令/开关来分别显示这些变量。

【问题讨论】:

看看控制面板 > 系统 > 高级 > 环境变量。它不一定与变量的值匹配,因为它可以被覆盖。 是的,用户变量优先。我试图在我的脚本中单独列出这些变量。 不,父环境优先,子进程继承。有时它不会。过程本身可以改变它。注册表只提供默认值。 HKLM\System\CurrentControlSet\Control\Session Manager\Environment 和 HKCU\Environment。 谢谢。我尝试搜索有关 env 变量优先级的 Microsoft 文档 - 尚未找到。 【参考方案1】:

在 PowerShell 中,它没有 cmdlet,但您可以使用 Environment 类中的底层 .NET 方法:

Write-Host "Machine environment variables"
[Environment]::GetEnvironmentVariables("Machine")

Write-Host "User environment variables"
[Environment]::GetEnvironmentVariables("User")

# This should be the same as 'Get-ChildItem env:', although it isn't sorted.
Write-Host "Process environment variables"
[Environment]::GetEnvironmentVariables("Process")

【讨论】:

要获取特定变量,请使用[Environment]::GetEnvironmentVariable("TEMP", "Machine")【参考方案2】:

使用以下批处理文件:

@echo off
for /f "tokens=3 usebackq" %%a in (`reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" ^| findstr TEMP`)  do @echo System variable TEMP = %%a
for /f "tokens=3 usebackq" %%a in (`reg query "HKEY_CURRENT_USER\Environment" ^| findstr TEMP`)  do @echo Current user variable TEMP = %%a

要从命令行使用,请将 %% 替换为 %

输出:

System variable TEMP = %SystemRoot%\TEMP
Current user variable TEMP = %USERPROFILE%\AppData\Local\Temp

请注意,HKEY_CURRENT_USER 优先(但由于某种原因,%USERPROFILE% 在评估 %TEMP% 时会扩展为短名称):

echo %USERPROFILE%
USERPROFILE=C:\Users\DavidPostill

echo %TEMP%
C:\Users\DAVIDP~1\AppData\Local\Temp

【讨论】:

必须从这些脚本中学到一些新东西。谢谢,很有帮助。

以上是关于Windows 用户环境变量与系统环境变量的主要内容,如果未能解决你的问题,请参考以下文章

环境变量 | 如何理解 windows计算机中的环境变量,以及配置Java环境时配置的环境变量?

windows10如何设置环境变量

环境变量在哪打开

Linux系统环境变量加载过程

windows 为啥设置了环境变量没生效

[Windows]ping itsafe&环境变量