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

Windows user environment variable vs. system environment variable

Windows中有没有shell/PowerShell命令分别列出用户环境变量和系统环境变量?

如果我这样做 -

SET TEMP

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

我正在寻找 shell command/switch 来分别显示这些变量。

在 PowerShell 中,没有适用于它的 cmdlet,但您可以在环境中使用底层 .NET 方法 class:

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_CURRENT_USER 优先(但由于某些原因 %USERPROFILE% 在评估 %TEMP% 时扩展为短名称):

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

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