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

时间:2019-03-11 17:40:30

标签: batch-file cmd pipe findstr

我想在(COM\d+)命令的输出中搜索模式mode。我已经尝试过:

mode | findstr /R (COM\d+)

但是它不返回任何东西。如果您能帮助我知道执行此操作的正确方法,将不胜感激。

P.S.1 由于有了这些注释,我现在有了mode | findstr /RC:"COM[0-9*]",它可以产生具有给定匹配项的行。现在,我需要找到一种方法来仅打印出匹配项。也许使用for /f ... in来循环字符串?

第二章:有人告诉我mode | findstr /RC:"COM[123456789][0123456789]*"是更安全的选择。

2 个答案:

答案 0 :(得分:1)

所以,为什么不只使用一个 for 循环命令并添加 \ 来在 { {1}} FindStr

  

错误::由于某些原因,命令行无法在首次运行时回显, "\C\O\M[0-9*]." COM 编号命令,仅在第二次运行时起作用,但将 echo/%_com% 添加到 Call 命令中,结果将在第一次运行时显示...

  • 在命令行中:
echo/%_com%
  
      
  • 结果第一行命令: 3
  •   
  • 结果第二行命令: COM3
  •   
  • 结果第三行命令: 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%
  
      
  • 对 命令执行第一个 结果: 3
  •   
  • 命令执行第二个 COM3
  •   
  • 命令执行第三个 结果: 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!
  
      
  • 结果:状态为准COM3:
  •   

对不起,我的英语英语

答案 1 :(得分:0)

听起来您只需要“ COM1”或“ COM3”作为输出。如果是这样,可以这样做:

for /f "tokens=4 delims=: " %A in ('mode ^| findstr /i /r "COM[0-9]*:"') do @echo %A

它将产生以下输出:

COM1