如何输出包含匹配和前一行的行?

时间:2019-01-20 15:03:26

标签: windows cmd

  

Bereitstellung的图像工具
  版本:10.0.17763.1
  Abbildversion:10.0.17763.253
  Funktionsliste:
  Funktionsidentität:Browser.InternetExplorer ~~~~ 0.0.11.0
  状态:Nicht vorhanden
  Funktionsidentität:Hello.Face.17658 ~~~~ 0.0.1.0
  状态:Installiert
  Funktionsidentität:Hello,Face.Migration.17658 ~~~~ 0.0.1.0
  状态:Installiert
  Funktionsidentität:Language.Basic ~~~ af-ZA〜0.0.1.0
  状态:Nicht vorhanden

我要输出下一行包含Status: Installiert的行。

我知道如何查找包含字符串Installiert的行,但不知道如何在比赛之前包含整行。

1 个答案:

答案 0 :(得分:1)

此写入批处理文件的命令行可用于此任务:

@for /F "usebackq delims= eol=" %%I in ("TextFile.txt") do @for /F "tokens=2 eol= delims=: " %%J in ("%%~I") do @if "%%~J" == "Installiert" (call echo(%%Line%%) else set "Line=%%I"

外部 FOR "解释为行尾字符。因此,以"开头的行将被外部 FOR 忽略。

内部的 FOR 将空格字符解释为行尾字符,这在这里无关紧要,因为空格字符也是定界符。首先通过 FOR 进行行拆分,结果是删除行首的所有空格和冒号,因此这里作为行尾字符的空格是没有问题的。

感谢您转到aschipfl,以获取有关带有指定选项的上述两个 FOR 如何处理指定文本文件中的行的这些附加信息。

更好的是:

@for /F usebackq^ delims^=^ eol^= %%I in ("TextFile.txt") do @for /F "tokens=2 delims=: eol=" %%J in ("%%~I") do @if "%%~J" == " Installiert" (call echo(%%Line%%) else set "Line=%%I"

外部 FOR 使用空的字符串定界符列表运行,并且没有行尾字符。内部的 FOR 也没有行尾字符运行,只是用冒号作为字符串定界符,这就是比较字符串开头的空格字符的原因。

在执行时,在包含已发布行的当前目录中的文件TextFile.txt上输出的两个命令行:

Funktionsidentität : Hello.Face.17658~~~~0.0.1.0
Funktionsidentität : Hello.Face.Migration.17658~~~~0.0.1.0

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • call /?
  • echo /?
  • for /?
  • if /?
  • set /?