从 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 提示符获取用户环境变量的主要内容,如果未能解决你的问题,请参考以下文章