在 Windows 批处理中获取串行 com 端口描述

Posted

技术标签:

【中文标题】在 Windows 批处理中获取串行 com 端口描述【英文标题】:get serial com port description in windows batch 【发布时间】:2015-01-05 03:01:55 【问题描述】:

我想检索设备管理器显示的串行 com 端口信息。例如,“英特尔(R) 主动管理技术 - SOL (COM3)”。 我知道使用命令“mode”来检索串口列表,但没有像“Intel(R) Active Management Technology - SOL”这样的描述。如何在 windows 批处理文件中获取此信息?

【问题讨论】:

【参考方案1】:

更新答案

... 由下面 cmets 中的原始提问者提供。显然Win32_SerialPort 不包括 USB-> 串行设备。 William 对此的解决方案是改为查询 Win32_PnPEntity

只是为了让我仍然觉得有用,这里有一种方法可以抓取该列表并将每一行设置为一个变量:

@echo off
setlocal

:: wmic /format:list strips trailing spaces (at least for path win32_pnpentity)
for /f "tokens=1* delims==" %%I in ('wmic path win32_pnpentity get caption /format:list ^| find "COM"') do (
    call :setCOM "%%~J"
)

:: display all _COM* variables
set _COM

:: end main batch
goto :EOF

:setCOM <WMIC_output_line>
:: sets _COM#=line
setlocal
set "str=%~1"
set "num=%str:*(COM=%"
set "num=%num:)=%"
set str=%str:(COM=&rem.%
endlocal & set "_COM%num%=%str%"
goto :EOF

原答案

wmicWin32_SerialPort 一起使用,如下所示:

@echo off
setlocal

for /f "delims=" %%I in ('wmic path Win32_SerialPort get DeviceID^,Caption^,Description^,Name^,ProviderType /format:list ^| find "="') do (
    set "%%I"
)

echo %DeviceID%
echo %Caption%
echo %Description%
echo %Name%
echo %ProviderType%

请参阅Win32_SerialPort 的文档以了解您可以查询哪些其他属性。我将把它作为练习留给你,让你找到一种方法来唯一地设置变量,这样你就不会用每个 COM 端口上的迭代来覆盖它们。尽情享受吧!

【讨论】:

此脚本未列出 USB 等设备 -> RS232 虚拟 COM 端口。 @LynnCrumbling 到目前为止,我发现的最接近的解决方案是Win32_USBControllerDevice documentation page 上的 PowerShell sn-p,如下所示:powershell -command "gwmi Win32_USBControllerDevice |%[wmi]($_.Dependent) | Sort Manufacturer,Description,DeviceID | Ft -GroupBy Manufacturer Description,Service,DeviceID"(可能需要 % 双抽在批处理脚本中)。不知道如何将其转换为 wmic,但 PowerShell cmdlet 可能会被按摩以拨入您想要的结果。 @rojo,我发现也许我们可以使用 Win32_PnPEntity:wmic path win32_pnpentity get caption /format:table | find "COM"【参考方案2】:

请使用mode 命令获取可用 COM 端口的详细信息..

【讨论】:

哇!这是一个很好的命令......它提供了除了端口描述之外的所有内容。

以上是关于在 Windows 批处理中获取串行 com 端口描述的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中获取 Windows 串行端口的输入缓冲区长度

如何在 Windows 中获取 COM 端口的友好名称?

Windows 7 上的奇怪行为 QT QSerialPort 不会更改串行 com 端口的设置

出现新串行端口时发出信号

具有多个事件的连续串行端口读取

使用Windows API配置串行端口:CreateFile失败,错误2(ERROR_FILE_NOT_FOUND)