Windows CMD - 查找 COM 端口的当前波特率

问题描述

我试图在命令提示符下解析 MODE 命令的输出并将其分配给一个变量。 mode输出如下图,

PS C:\Users\test> mode %COMPORT%

Status for device COM5:
-----------------------
    Baud:            9600
    Parity:          None
    Data Bits:       8
    Stop Bits:       1
    Timeout:         OFF
    XON/XOFF:        OFF
    CTS handshaking: OFF
    DSR handshaking: OFF
    DSR sensitivity: OFF
    DTR circuit:     OFF
    RTS circuit:     OFF

我正在尝试使用 FIND 获取第一行,如下所示,

mode COM5 | find /I "Baud"

上面写着FIND: Parameter format not correct

顺便说一句,这是整个代码的样子,

@echo off
for /f "tokens=3" %%a in (
    'REG QUERY HKLM\HARDWARE\DEVICEMAP\SERIALCOMM'
) do set "COMPORT=%%a" 
echo %COMPORT%

for /f "tokens=2" %%a in (
    'MODE %COMPORT% | FIND /I "Baud"'
) do set "SPEED=%%a" 
echo %sPEED%

但这不起作用,我做错了什么?

解决方法

尽管我仍然不知道为什么相同的命令在普通控制台中有效,而在 powershell 控制台中无效,但脚本的问题完全在不同的地方。在 for 循环中,您需要转义 | 字符。真正的问题不是 FIND 命令的 Parameter format not correct 错误(误报),而是 |

所需的转义

修正后的脚本如下所示。

@echo off
for /f "tokens=3" %%a in (
    'REG QUERY HKLM\HARDWARE\DEVICEMAP\SERIALCOMM'
) do set "COMPORT=%%a" 
echo %COMPORT%

for /f "tokens=2" %%a in (
    'MODE %COMPORT% ^| FIND /I "Baud"'
) do set "SPEED=%%a" 
echo %SPEED%