使用findstr正则表达式搜索管道结果中的模式

问题描述 投票:0回答:3

我想在(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]*"是一个更安全的选择。

batch-file cmd pipe findstr
3个回答
1
投票

根据我的评论,这里有两个简单的例子:

从命令提示符,以满足您的标记:

(For /F Delims^=: %A In ('Mode^|FindStr "COM[0-9]*:"')Do @For %B In (%A)Do @Set "var=%B")&Call Echo(%var%

从批处理文件,以满足您的标记:

@(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

1
投票

所以,为什么不只使用一个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设备的状态:

对不起我有限的英语


0
投票

听起来你只想要“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*]."
© www.soinside.com 2019 - 2024. All rights reserved.