我想在(COM\d+)
命令的输出中搜索模式mode
。我试过了:
mode | findstr /R (COM\d+)
但它不会返回任何东西。如果你能帮助我知道这样做的正确方法,我将不胜感激。
P.S.1由于评论,我现在有mode | findstr /RC:"COM[0-9*]"
,它产生给定匹配的线。现在我需要找到一种方法来打印出匹配。也许使用for /f ... in
循环字符串?
P.2.2我被告知mode | findstr /RC:"COM[123456789][0123456789]*"
是一个更安全的选择。
根据我的评论,这里有两个简单的例子:
从命令提示符,以满足您的cmd标记:
(For /F Delims^=: %A In ('Mode^|FindStr "COM[0-9]*:"')Do @For %B In (%A)Do @Set "var=%B")&Call Echo(%var%
从批处理文件,以满足您的batch-file标记:
@(For /F Delims^=: %%A In ('Mode^|FindStr "COM[0-9]*:"')Do @For %%B In (%%A)Do @Set "var=%%B")&Call Echo(%%var%%&Pause
为了补充我对WMI的评论,你可以尝试:
从命令提示符:
For /F Skip^=1Delims^= %A In ('WMIC Path Win32_SerialPort Get DeviceID 2^>Nul')Do @For %B In (%A)Do @Echo(%B
从批处理文件:
@For /F Skip^=1Delims^= %%A In ('WMIC Path Win32_SerialPort Get DeviceID 2^>Nul')Do @For %%B In (%%A)Do @Echo(%%B&Pause
所以,为什么不只使用一个qazxsw poi loop命令并在for
中添加qazxsw poi for literal find COM + RegEx:\
Obs。:由于某种原因,命令行不适用于第一次运行中的回显,
FindStr
命令的COM编号,仅在第二次运行工作,但将"\C\O\M[0-9*]."
添加到echo/%_com%
命令,结果显示在第一次运行...
Call
- 结果第1行命令:3
- 结果第二行命令:COM3
- 结果第3行命令:COM3:
echo/%_com%
- 结果第1命令:3
- 结果第二个命令:COM3
- 结果第3个命令:COM3:
通过命令行查看您的自己:
for /f "tokens=2delims=COM:" %i in ('mode ^| findstr /RC:"\C\O\M[0-9*]."') do set "_com=%i"&& call echo/%_com%
for /f "tokens=2delims=COM:" %i in ('mode ^| findstr /RC:"\C\O\M[0-9*]."') do set "_com=COM%i"&& call echo/%_com%
for /f "tokens=2delims=COM:" %i in ('mode ^| findstr /RC:"\C\O\M[0-9*]."') do set "_com=COM%i:"&& call echo/%_com%
- 结果:COM3设备的状态:
对不起我有限的英语
听起来你只想要“COM1”或“COM3”作为输出。如果是这样,那就行了:
@echo off & setlocal enabledelayedexpansion
for /f "tokens=2delims=COM:" %%i in ('mode ^| findstr /RC:"\C\O\M[0-9*]."') do set "_com=%%i"&& echo/!_com!
for /f "tokens=2delims=COM:" %%i in ('mode ^| findstr /RC:"\C\O\M[0-9*]."') do set "_com=COM%%i"&& echo/!_com!
for /f "tokens=2delims=COM:" %%i in ('mode ^| findstr /RC:"\C\O\M[0-9*]."') do set "_com=COM%%i:"&& echo/!_com!
它会产生以下输出:
mode | findstr /RC:"\C\O\M[0-9*]."