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

Windows用户环境变量与系统环境变量,windows,powershell,cmd,environment-variables,Windows,Powershell,Cmd,Environment Variables,在Windows中,是否有任何shell/PowerShell命令分别列出用户环境变量和系统环境变量 如果我这样做- SET TEMP Windows显示用户环境变量,而不是TEMP的系统变量 我正在寻找一个shell命令/开关来分别显示这些变量。在PowerShell中,没有用于它的cmdlet,但您可以在Environment类中使用底层的.NET方法: Write-Host "Machine environment variables" [Environment]::GetEnviron

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

如果我这样做-

SET TEMP
Windows显示用户环境变量,而不是
TEMP
的系统变量


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

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

使用以下批处理文件:

@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\u当前\u用户
采取了以下步骤(但由于某些原因,
%USERPROFILE%
在评估
%TEMP%
时扩展为短名称):


只需使用控制面板>系统>高级>环境变量进行查看。它不一定与变量的值匹配,因为它可以被重写。是的,用户变量优先。我试图在脚本中单独列出这些变量。不,父进程的环境优先,子进程继承它。有时候不是。这个过程本身可以改变它。注册表只提供默认值。HKLM\System\CurrentControlSet\Control\Session Manager\Environment和HKCU\Environment。谢谢。我试图搜索微软关于env变量优先级的文档,但还没有找到一个。要获得一个特定的变量,请使用
[Environment]::GetEnvironmentVariable(“TEMP”,“Machine”)
从这些脚本中学习一些新东西。谢谢,那很有帮助。
echo %USERPROFILE%
USERPROFILE=C:\Users\DavidPostill

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