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 用户环境变量与系统环境变量的主要内容,如果未能解决你的问题,请参考以下文章