【问题标题】:Get User environment variables from cmd prompt从 cmd 提示符获取用户环境变量
【发布时间】:2016-02-23 09:45:45
【问题描述】:

我希望有一个简单的答案。是否有一个命令可以为我提供所有 User 环境变量的列表? (或用户环境变量的值,如果存在)。我知道有“设置”命令,但是它同时列出了用户和系统变量。我正在运行一个脚本,我想知道用户变量中是否存在特定的环境变量。只有其他选项是使用注册表信息。但我想知道这是否可以通过命令行或类似的方式实现。

谢谢

【问题讨论】:

  • 一旦变量在进程的环境中,关于它们来自哪里的信息早就不复存在了。
  • @AdrianMcCarthy 从技术上讲并不是真的,例如,您可以在 C# 中为进程、用户或机器目标分别列出环境变量:msdn.microsoft.com/en-us/library/…
  • @Igor Brejc:我不确定这是否真的在检查同一件事。我相信枚举是用于检查和操作将为新流程实例化的变量。如果您创建一个进程,然后更改系统环境变量,该进程的环境仍将具有旧值。 (这是我有根据的猜测。我不熟悉这个 .Net 界面。)

标签: windows command-line


【解决方案1】:

查询注册表可能是最简单的只返回用户环境变量的方法:

reg query HKEY_CURRENT_USER\Environment

这是返回输出的示例:

λ reg query HKEY_CURRENT_USER\Environment

HKEY_CURRENT_USER\Environment
    ChocolateyLastPathUpdate    REG_SZ    132148451031142736
    ChocolateyToolsLocation    REG_SZ    C:\tools
    ip    REG_SZ    ipconfig /all | findstr /IR "ipv4 ethernet adapter" | findstr /IRV "description tunnel vpn dial bluetooth [2-9]:$" | findstr /LV "*"
    Path    REG_EXPAND_SZ    C:\PATH\gnuwin32\bin;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
    QB    REG_SZ    tasklist /FI "IMAGENAME eq qbittorrent.exe"
    TEMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    TMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp

【讨论】:

    【解决方案2】:

    1-在批处理文件中获取用户环境变量的方法:

    (
        echo Set Sh = CreateObject^("WScript.Shell"^)
        echo Set User = Sh.Environment^("user"^)
        echo For Each strItem In User
        echo msgbox strItem
        echo Next
        ) > %tmp%\user.vbs
        start /wait %tmp%\user.vbs
        del /f %tmp%\user.vbs
    

    2- 在 VBscript 文件中:

      Set Sh = CreateObject( "WScript.Shell" )
        Set User = Sh.Environment( "user" )
        For Each strItem In User
            txt= strItem & vbCrlf & txt
        Next
        sh.popup txt,10,"list ofvariables in User environment"
    

    【讨论】:

      【解决方案3】:

      在提升的 cmd 提示符下使用 psexec (https://technet.microsoft.com/en-us/sysinternals/psexec.aspx),以下将为您提供系统变量列表。

      psexec -s cmd /c set
      

      您可以在正常提示下将该列表与set 列表进行比较,以检测哪些变量不同,即用户变量。

      我没有看到更直接的方法(除了从注册表中读取环境)。

      【讨论】:

      • 根据您提供的链接中的信息,看来我需要安装 Pstools 并且它不附带 Windows 操作系统?奇怪的是Windows有SETX命令来设置用户或系统级别的变量,但没有命令来获取用户与系统的变量。
      • @Nik 你只需要解压ZIP文件,不需要安装。第一次运行 psexec 时,它会弹出一个框,其中包含您必须确定的条款,或者您可以运行 psexec -accepteula 绕过它。
      • 谢谢。我正在运行一个脚本,该脚本将在用户机器上运行,我无法控制添加此 exe。我想我会探索注册表选项
      • 希望迟到的投票者至少留下评论为什么。
      • ➕1 提到 psexec 和 pstools 包!向 Sysinternals 的 Mark Russinovich 致敬! :)
      【解决方案4】:

      是的,只需使用 set 命令:

      SET
      

      List all environment variables from command line?

      如果您想查看带有指定前缀的所有内容:

      SET prefix 
      

      【讨论】:

      • 你错过了这部分问题I know there is 'set' command, **however it lists both user and system variables**
      • @Coffee , SET 命令同时列出用户和系统环境变量。我需要知道是否存在 user 环境变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多