批处理文件 - 搜索文件中的单词列表并打印出不包含它们的行

时间:2018-02-20 08:12:01

标签: batch-file text cmd

所以我正在尝试为以下目的编写批处理文件, 文件1包含大量文本内容,关键字“代码”用作变量,即代码始终具有分配给它的值,如代码= 0145。文件2包含代码值列表。 运行时的批处理文件将通过文件1查找文件2中提到的值,如果找到它们则省略行。 e.g。

File 1:
This line has code=0145
We have code=3257
Code=8956 here
This entry has code=7542

File 2:
3257
7542

Output file 3:
This line has code=0145
Code=8956 here

这可以通过批处理文件吗?

1 个答案:

答案 0 :(得分:1)

FINDSTR /i /L "code=" "1.txt"|FINDSTR /v /g:"2.txt">3.txt

可能合适。它首先查找文本“code =”(/i表示不区分大小写),对于包含该文本的行,选择/v不包含“2中的任何文本”的行。 txt“文件。

现在,说了这句话

Bad data 3257 code=7777
跳过

,因为3257包含在文本和

Bad data code=17542
跳过

,因为7542包含在文本中,尽管在code字符串中。

就此而言,如果123文件中包含2.txt,则会排除包含123code=1234的所有包含code=7123的行。< / p>

可以检测出现在文本中的code=string,还有code = string Space ,但方法略有不同。需要更多信息。喜欢 - 代码总是 4位数等吗?

鉴于代码编号是4位数,隐含地需要字符串code=9999,那么

(FOR /f %%a IN (2.txt) DO ECHO code=%%a)>2.tmp
FINDSTR /i /L "code=" "1.txt"|FINDSTR /v /g:"2.tmp"

第一行占用2.txt的每一行,并将code=前缀为2.tmp的文件反刍。 for循环带括号,以便可以将输出重定向到新文件2.tmp

第二行首先过滤包含code=的行的源数据,然后结果排除包含2.tmp中任何行的行。

如果您想要包含code=的行,请使用

FINDSTR /v /g:"2.tmp" "1.txt"