通过命令行搜索多个文件中的多个字符串

时间:2014-02-12 01:57:48

标签: search csv command-line

我有一个包含大约500个值的txt文件,每行一个。我需要检查这些500个值中的任何一个是否出现在每个包含100k行的6个csv文件中。我可以使用

在这6个csv文件中搜索一个值
 for /f "delims==" %%f in ('dir /s /b "P:\*.txt"') do FIND /N "[SEARCHSTRING]" "%~1%%f" >> "C:\found.txt"

但如何通过命令行或批处理文件(CaSe SenSiTIve)自动进行多次搜索?

3 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "destdir=C:\destdir"
for /f "delims=" %%a in ('dir /s /b "%sourcedir%\*.csv"') do (
  FINDSTR /N /g:"yourtextfilecontaining500linestomatch.txt" "%%~fa") > "%destdir%\%%~nafound.txt"
GOTO :EOF

你要问的是相当不清楚的。我使用c:\sourcedir作为.csv文件的位置,并使用c:\destdir作为报告的位置。用原始文件替换 FINDSTR /N /g:"yourtextfilecontaining500linestomatch.txt" "%%~fa") > "%destdir%\%%~nafound.txt(使用双> 会将行累积到一个文件中 - 如果这就是你想要的。现在,将创建一个名为与您的.csv + found.txt

相同

答案 1 :(得分:0)

一种简单的方法是使用批处理脚本。您可以逐个遍历每个文件。如果你想一次性完成它们,你需要编写程序。

for /L %%A in (1,1,6) do (
     Your code goes here
)

该批处理脚本将循环六次。我不确定你是如何指定文件的,但是如果循环遍历每个文件,它将会起作用。

所以把你当前的批处理脚本放在我说“你的代码就在这里”的地方

for /f "delims==" %%f in ('dir /s /b "P:\*.txt"') do FIND /N "[SEARCHSTRING]" "%~1%%f" >> "C:\found.txt"

但您需要对其进行编辑以指向要搜索的文件。如果您的文件是1.txt,2.txt 3.txt,那么您需要做的就是将文件名设置为当前循环迭代次数。

答案 2 :(得分:0)

我多年来一直在使用这个shell函数的变体:

ematch () {
    for f in $(find . -type f | grep -v '~' | grep -v \.svn\/) ; do 
    egrep "$1" "$f" /dev/null 2> /dev/null
    done
}

- > ematch“(string1 | string2 | string3)”

随意适应您的需求并在此处发布您的mod。