首页 > 解决方案 > 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%

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

标签: windowspowershellserial-portfindbaud-rate

解决方案


尽管我仍然不知道为什么相同的命令在普通控制台中有效但在 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%

推荐阅读