我有一个包含大约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)自动进行多次搜索?
答案 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。