【问题标题】:Windows user environment variable vs. system environment variableWindows 用户环境变量与系统环境变量
【发布时间】: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 文档 - 尚未找到。

标签: windows powershell cmd environment-variables


【解决方案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

【讨论】:

  • 必须从这些脚本中学到一些新东西。谢谢,很有帮助。
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2019-01-19
  • 2017-07-16
  • 2015-09-12
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多