我尝试使用FINDSTR搜索一个文件夹的文件夹,使用字符串的文本文件,然后输出到results.txt
字符串的文本文件包含3,200行,每行包含作者姓名和相关的书名。例子:
George Orwell 1984
H. G. Wells War of the Worlds
Isaac Asimov I, Robot
我还有一个包含十几个电子书文件名文本列表的文件夹(其中一些列表有超过500K行。),例如:
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作者和标题的文件名文本文件,并将结果输出到第3个文本列表。
文件名还包含其他内容,如系列信息,格式等,所以我正在查找包含这些作者姓名和标题但与搜索字符串不完全匹配的任何行,如上面的示例所示。
这是我尝试过的。它匹配完全正确的字符串确定但我无法看到如何找到包含其他内容的文件名以及搜索字符串中的所有单词。
findstr /g:C:\strings.txt *.txt >>C:\results.txt
任何人都可以帮我解决这些问题。感谢。
答案 0 :(得分:0)
由于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]+
并替换字符串{{1 }}。搜索表达式会搜索一个或多个不是单词字符,回车符或换行符的字符。
然后可以使用:
.*
findstr /I /R /G:C:\Temp\strings.txt *.txt >>C:\Temp\results.txt
和strings.txt
不应位于包含 FINDSTR 搜索的* .txt文件的当前目录中,或与results.txt
使用的文件扩展名不同的文件扩展名中这两个文件。