排除其他文件中包含的密钥字符串文件的所有行

时间:2019-04-14 04:47:19

标签: windows batch-file

我正在尝试编写Windows批处理文件,其中涉及两个文件。

第一个文件all.err包含失败的测试案例的日志,如下所示:

`CHECK:FAIL,"It should have been DEST`"
`CHECK:FAIL,"It should have been XYZA`"
`CHECK:FAIL,"It should have been PRTS`"
`CHECK:FAIL,"It should have been ABCD`"
.....................................

我们还有另一个文件exclude.txt,该文件每行存储一些字符串,例如:

XYZA
ABCD

我正在尝试编写Windows批处理脚本,该脚本可以列出all.err中所有不包含exclude.txt中任何单词的行。

我不知道该如何实施-知道吗?

2 个答案:

答案 0 :(得分:6)

SomethingDark编写的此任务仅需要一个Windows命令行:

%SystemRoot%\System32\findstr.exe /I /L /V /G:exclude.txt all.err

在Windows命令提示符窗口中运行的帮助输出findstr /?解释了参数/I(不区分大小写-i i i),/L(搜索字符串是 l 常规字符串),/V(在 v 匹配输出中),/G g 个搜索字符串文件)。

答案 1 :(得分:0)

使用for循环时,您需要先浏览排除文件,获取每一行,然后从日志文件中的搜索中排除这些meta vialiables:

@echo off
for /f "delims=" %%i in (exclude.txt) do (
     for /f "delims=" %%b in ('type all.log ^| findstr /V "%%i"') do echo(%%b
)

不需要第一个do代码块,出于可读性考虑,我只是像这样发布了它,它可以是:

@echo off
for /f "delims=" %%i in (exclude.txt) do for /f "delims=" %%b in ('type all.log ^| findstr /V "%%i"') do echo(%%b