Batch file CMD上的批处理脚本以获取变量上的COM端口

Batch file CMD上的批处理脚本以获取变量上的COM端口,batch-file,cmd,port,Batch File,Cmd,Port,我想存储可用COM端口的信息,并将它们存储在变量上 该命令必须在脚本中运行。仅搜索时,我发现此命令非常有效: wmic path win32_pnpentity get caption /format:table| find "COM" 它返回: USB-SERIAL CH340 (COM6) 我想让它识别哪个设备。关于此信息,我需要提取COM6或6您需要一个for/F循环来解析此命令的输出。尽管这不起作用,但由于我的计算机输出Intel(R)*(COM3),我们将讨论您的计算机和特定的输

我想存储可用COM端口的信息,并将它们存储在变量上

该命令必须在脚本中运行。仅搜索时,我发现此命令非常有效:

wmic path win32_pnpentity get caption /format:table| find "COM" 
它返回:

USB-SERIAL CH340 (COM6)

我想让它识别哪个设备。关于此信息,我需要提取
COM6
6

您需要一个
for/F
循环来解析此命令的输出。尽管这不起作用,但由于我的计算机输出
Intel(R)*(COM3)
,我们将讨论您的计算机和特定的输出。我建议您使用:

for/F“tokens=2 delims=()”%%A IN('wmic path win32_pnpentity get caption/format:table^ | findstr/c:“COM”)do echo%%A
这将
回显信息。要将其存储在变量中,请使用
设置“com\u info=%%a”

您还说过,您想从
COM6
中提取
6
。这也是可能的;使用:

for/F“tokens=2 delims=()”%%A IN('wmic path win32_pnpentity get caption/format:table^ | findstr/c:“COM”)是否设置“COM_info=%%A”&调用集“COM_num=%COM_info:~-1%”
echo
替换为
set
或要
echo
的相反位置和相反位置


在cmd中,将出现的
%%A
替换为
%A

以下是在cmd.bat脚本文件中执行此操作的方法。这将导致设置最后一个com端口。我看不到任何关于如何处理多个com端口的指示

@ECHO OFF
FOR /F "delims=^T tokens=1,2" %%a IN ('powershell -NoLogo -NoProfile -Command ^
    "Get-CimInstance -ClassName Win32_PnPEntity |" ^
        "Where-Object { $_.Name -match '.*\(COM(\d)\)'} | Out-Null;" ^
        "$Matches[0] + '^t' + $Matches[1]"') DO (
    SET "CPNAME=%%a"
    SET "CPNUM=%%b"
)

ECHO CPNAME is %CPNAME%
ECHO CPNUM is %CPNUM%
当然,如果直接使用PowerShell,则在没有cmd.exe开销的情况下更容易实现。您可以将以下代码保存在
comport.ps1

Get-CimInstance -ClassName Win32_PnPEntity |
    Where-Object { $_.Name -match '.*\(COM(\d)\)' } | Out-Null
$cpname = $Matches[0]
$cpnum = $Matches[1]

$cpname
$cpnum

更新:这是从COM3

@echo off&&setlocal enabledelayedexpansion
对于/f“tokens=2delims=COM:%%i in('mode^ | findstr/RC:“\C\O\M[0-9*]”),请设置“_COM=%%i”&echo/_通用域名格式!
  • ::或::
@echo off&&setlocal enabledelayedexpansion
对于/f“tokens=2delims=COM:%%i in('mode^ | findstr/C:'COM'),请设置“_COM=%%i”&echo/_通用域名格式!
::批处理结果3

Obs.对于命令行使用:For/f“tokens=2delims=COM:%%i in('mode^ | findstr“COM')是否设置“_COM=%i”&调用echo/%%u COM%


纯批量解决方案

对于bat文件,可能建议使用
chgport
Reg Query

通过
chgport

通过使用此变量:
_com\[%%L]获取COM+n

通过使用此变量:
%%L
获取n

@echo off&setlocal enabledelayedexpansion&set“\u cnt=0”
cd/d“%systemroot%”
对于/f“tokens=*delims=“%%C in('where/r.chgport.exe'),请设置”\u chgport=%%~fC”
对于/f“delims==tokens=1,2”%%i in(“!!\u chgport!^ | findstr/v”#“),请设置/a“\u cnt+=1”&&set”\u com[!\u cnt!]=%%i^=%j”
popd&echo/COM[n]:设备[id]:&for/l%%l in(11!\u cnt!)do echo/_com\[%%L]!
::仅用于获取编号::使用%%C**
对于/l%%l in(11!\u cnt!)执行/f%%C in('echo/!\u com.[%l]:com^=!')执行设置“\u com\u N=%%C”和echo/_com_N!=COM%%C
::命令行结果::

COM[n]:设备[id]:
COM3=\Device\huawei\u cdcacm\u acmseria1
COM4=\Device\huawei\u cdcacm\u AcmSerial0
3=COM3
4=COM4

通过
Reg查询
:
通过使用此变量:
_com#获取COM+n

通过使用此变量:
_com#:com=以获取n

@echo off&setlocal enabledelayedexpansion
设置_key=“HKEY\U LOCAL\U MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM”
对于/f“tokens=1,3 delims=“%%i in('reg query!\u key!^ find/v“HKEY”)do(
设置“\u设备=%%i”&设置“\u com=%%j”&echo/!\u com
::仅用于获取编号::通过使用_指挥官:~3!得到
对于/f“tokens=3 delims=“%%c in('reg query!\u key!^ find/v“HKEY”)请设置“\u com\u N=%%c”和&echo/_司令部:~3!=_康恩!
::命令行结果::

COM4\Device\huawei\u cdcacm\u AcmSerial0
COM3\Device\huawei\U cdcacm\U ACMSeria1
4=COM4
3=COM3


对不起,英语不是我的第一语言。

你是说“批处理”脚本吗?哦,对不起,输入错误。你能帮我吗本杰明?看起来很简单,但我在这里遇到了困难。在cmd行上用一个
for/f
解析输出:
for/f“tokens=2delims=()%a in('wmic path win32_pnpentity get caption/format:table^ find“COM”)在批处理文件中设置“COM=%a”
,将
%a
增加一倍。问题是我对批处理脚本一无所知,只有Bash;)不要使用
get caption
尝试
get*
查看其他哪些字段可能有用。