从 cmd 提示符获取用户环境变量

Posted

技术标签:

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

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

谢谢

【问题讨论】:

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

以上是关于从 cmd 提示符获取用户环境变量的主要内容,如果未能解决你的问题,请参考以下文章

bat脚本如何获取环境变量字面值(请看问题说明再回答)?

cmd中cmd怎么进入环境变量

win7 无法修改系统环境变量

怎么修改Win7环境变量PATH

java环境变量设置路径成功后在cmd中还是存在问题

Java环境变量设置成功后运行cmd时提示错误 不是内部或外部命令,也不是可运行的程序或批处理文件