You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Windows Batch脚本实现COM端口选择功能?

实现方案

以下是满足你需求的Windows批处理脚本,包含端口过滤、去重、交互式选择和输入验证功能:

完整脚本

@echo off
setlocal enabledelayedexpansion

:: 初始化变量
set "portCount=0"
set "validPorts="

:: 获取并过滤有效COM端口(只保留COM+数字的格式,去重)
for /f "tokens=1,2 delims==" %%a in ('wmic path Win32_SerialPort get DeviceID,Description /format:list ^| findstr /r "^DeviceID=COM[0-9]*$"') do (
    set "port=%%a"
    set "port=!port:DeviceID=!"
    set "desc=%%b"
    :: 去重检查:用字符串包含判断端口是否已存在
    if not "!validPorts:!port!=!"=="!validPorts!" (
        set /a portCount+=1
        set "port_!portCount!=!port!"
        set "desc_!portCount!=!desc!"
        set "validPorts=!validPorts!!port!=!"
    )
)

:: 无有效端口的处理
if %portCount% equ 0 (
    echo No valid COM ports found.
    pause
    exit /b 1
)

:: 显示选择菜单
echo Please select what COM port to use:
for /l %%i in (1,1,%portCount%) do (
    echo   %%i - !port_%%i!=!desc_%%i!
)
echo or press ESC to exit.

:: 交互式输入捕获与验证
:inputLoop
set "key="
:: 通过xcopy读取单个按键(支持ESC)
for /f "delims=" %%k in ('xcopy /w "%~f0" "%~f0" 2^>nul') do if not defined key set "key=%%k"
set "key=!key:~0,1!"

:: 处理ESC退出
if "!key!"=="" (
    echo Exiting...
    exit /b 0
)

:: 验证输入是否为数字
echo !key! | findstr /r "^[0-9]*$" >nul
if errorlevel 1 (
    echo Invalid input. Please enter a number from the list or press ESC.
    goto inputLoop
)

:: 验证输入是否在有效范围内
if !key! lss 1 if !key! gtr %portCount% (
    echo Invalid selection. Please choose a number between 1 and %portCount%.
    goto inputLoop
)

:: 获取选中的端口信息
set "selectedPort=!port_!key!"
set "selectedPortNum=!selectedPort:COM=!"

echo You selected COM port: !selectedPort! (Number: !selectedPortNum!)
:: 替换为你的exe启动命令,示例:
:: start "" "your_target_program.exe" -com !selectedPortNum!

endlocal

关键功能说明

  • 有效端口过滤:使用wmic系统命令获取串口信息,通过正则表达式过滤出标准COM+数字格式的端口,排除非标准自定义名称端口;如果已有自己的端口获取方案,可替换for /f中的wmic命令部分,适配你提供的_COMx=描述格式输出。
  • 去重处理:通过validPorts变量记录已识别的端口,利用字符串包含判断避免重复添加相同端口。
  • 交互式选择与验证:用xcopy实现单按键读取,支持ESC键退出;两层验证逻辑确保输入为有效数字且在菜单编号范围内,错误输入会循环提示重新输入。
  • 端口编号提取:从选中的COMx中提取纯数字编号,直接用于后续exe程序的参数传递。

自定义修改点

  • 替换脚本末尾的start "" "your_target_program.exe" -com !selectedPortNum!为你实际的exe启动命令,传入提取到的端口编号。
  • 若使用自定义端口获取逻辑,调整for /f的tokens和delims参数,确保正确提取端口名和描述信息。

内容的提问来源于stack exchange,提问作者Parduz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:43:20