我正在尝试编写一个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
中任何单词的所有行。
我无法理解这是如何实现的 - 任何想法?
使用for
循环时,您需要首先浏览排除文件,获取每一行,然后在日志文件中从搜索中排除这些元变量:
@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
由SomethingDark编写的此任务只需要一个Windows命令行:
%SystemRoot%\System32\findstr.exe /I /L /V /G:exclude.txt all.err
在Windows命令提示符窗口findstr /?
中运行的帮助输出解释了参数/I
(不区分大小写),/L
(搜索字符串是文字字符串),/V
(反向匹配输出),/G
(从文件中获取搜索字符串)。