所以我正在尝试为以下目的编写批处理文件, 文件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
这可以通过批处理文件吗?
答案 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
,则会排除包含123
和code=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"