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

22
在Windows中,是否有任何shell/PowerShell命令可以分别列出用户环境变量和系统环境变量?
如果我执行-
SET TEMP

Windows 显示用户环境变量而非系统变量的 TEMP

我正在寻找一个 shell 命令/开关,以单独显示这些变量。


只需在控制面板>系统>高级>环境变量中查看即可。它不一定与变量的值匹配,因为它可以被覆盖。 - Hans Passant
是的,用户变量具有优先权。我正试图在我的脚本中单独列出这些变量。 - thinkster
不,父进程的环境变量优先级更高,子进程会继承它。但有时候也不是这样的。而且进程本身也可以更改它。注册表只提供默认值。HKLM\System\CurrentControlSet\Control\Session Manager\Environment 和 HKCU\Environment。 - Hans Passant
谢谢。我尝试在微软的文档中搜索环境变量优先级,但还没有找到。 - thinkster
2个回答

33
在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")

9
要获取特定的变量,请使用 [Environment]::GetEnvironmentVariable("TEMP", "Machine") - Frode F.

1
使用以下批处理文件:
@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 优先级更高(但由于某种原因,在评估 %TEMP% 时,%USERPROFILE% 被扩展为短名称):
echo %USERPROFILE%
USERPROFILE=C:\Users\DavidPostill

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

从这些脚本中学到了新的东西。谢谢,很有帮助。 - thinkster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接