Findstr:在txt文件文件夹中搜索字符串列表

Posted

技术标签:

【中文标题】Findstr:在txt文件文件夹中搜索字符串列表【英文标题】:Findstr: Search list of strings in folder of txt files 【发布时间】:2018-11-27 13:48:42 【问题描述】:

我正在尝试使用 FINDSTR 搜索一个充满文本文件的文件夹,使用字符串文本文件,然后输出到 results.txt

字符串文本文件包含 3,200 行,每行包含一个作者姓名和相关的书名。例子:

George Orwell 1984
H. G. Wells War of the Worlds
Isaac Asimov I, Robot

我还有一个文件夹,其中包含十几个电子书文件名的文本列表(有些列表超过 50 万行。),例如:

George Orwell - 1984 (epub).rar
H G Wells - War of the Worlds (pdf).rar
Isaac Asimov - [Robot 0.1] - I, Robot (Mobi).rar

我需要在文件名的文本文件中搜索 3,200 个作者和标题,并将结果输出到第三个文本列表。

文件名还包含其他内容,如系列信息、格式等,因此我正在寻找任何包含这些作者姓名和标题但与搜索字符串不完全匹配的行,如我上面的示例所示。

这是我尝试过的。它可以匹配确切的字符串,但我看不到如何让它找到包含其他内容的文件名以及搜索字符串中的所有单词。

findstr /g:C:\strings.txt *.txt >>C:\results.txt

谁能帮我写代码。谢谢。

【问题讨论】:

你的方法行不通。默认情况下 findstr 是基于正则表达式的,其中每个带有空格的搜索都是 ORed。所以George Orwell 1984 将匹配当前.txt 文件中包含GeorgeOrwell1984 的任何行。 Stack Overflow 也不是免费的脚本编写服务。展示您自己的编码尝试,我们或许能够查明您的错误并引导您找到解决方案。 findstr 不能进行近似搜索,所以如果没有一个搜索字符串(作者和标题)完全匹配(除此之外),应该如何查找文件?也许您调整列表文件C:\strings.txt 并在之后进行搜索... LotPings,如果你真的阅读了我的帖子,你会看到我确实发布了我自己的编码...... 【参考方案1】:

由于strings.txt 中的字符串在 *.txt 文件中不存在 1:1,因此在文件中查找需要正则表达式搜索。

需要将strings.txt中的字符串从

George Orwell 1984
H. G. Wells War of the Worlds
Isaac Asimov I, Robot

George.*Orwell.*1984
H.*G.*Wells.*War.*of.*the.*Worlds
Isaac.*Asimov.*I.*Robot

这可以通过在支持 Perl 正则表达式的文本编辑器中打开 strings.txt 并从文件顶部运行 Perl 正则表达式替换所有搜索字符串 [^\w\r\n]+ 并替换字符串 .* 来完成。搜索表达式会搜索一个或多个不是单词字符、回车符或换行符的字符。

那么就可以使用了:

findstr /I /R /G:C:\Temp\strings.txt *.txt >>C:\Temp\results.txt

strings.txtresults.txt 不应位于包含 FINDSTR 搜索的 *.txt 文件的当前目录中,或者这两个文件使用的文件扩展名与 .txt 不同。

【讨论】:

以上是关于Findstr:在txt文件文件夹中搜索字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

FINDSTR正则表达式的基本用法

findstr

通过excel搜索txt文件中的字符串列表

批处理findstr命令应用

如何在cmd中进行简单的文件搜索

如何根据 .txt 文件中的关键字在 Python 中创建列表?