Board logo

标题: [分享]多关键字自动批量搜索 [打印本页]

作者: judas     时间: 2009-2-4 18:07    标题: [分享]多关键字自动批量搜索

工作需要,要在上百GB的文件数据中以数千个不同的关键字进行搜索,并将搜索到的文件拷贝出来。
由于工作量较大,重复工作太多就想用批处理试试。于是在论坛中搜索相关资料,东拼西凑地写了一个可以多关键字自动搜索的批处理。

具体实现步骤如下:
1.遍历目录:
要搜索的数据不是时常变动,所以只在该文件夹变更后遍历该目录一次就行了。

遍历目录代码:
for /r L:\test %%i in (*.*) do echo %%i>>dir.txt
2.批量搜索:
对遍历目录后生成的dir.txt文件进行多关键字自动搜索,要求将需要搜索的关键字竖排复制到search.txt文件中并在最后一行以end结尾。
search.txt内容如:
123
12
111
end


批量搜索代码:
@echo off
echo 自动搜索 by judas
title 文件搜索
color 1f

:loop
echo.
for /f "delims=" %%a in (search.txt) do (
  set filename=%%a
  more +1 search.txt > search_tmp.txt
  move /y search_tmp.txt search.txt
  echo %%a >> done.log
  goto show
)

:show
echo 搜索值为:
echo.
echo %filename%
if "%filename%"=="end" goto end
echo.
goto search

echo.
:search
echo 文件搜索中,请耐心等待...
findstr /i /c:"%filename%" dir.txt>>temp.txt
type temp.txt
for /f "tokens=*" %%b in (temp.txt) do echo "%%b">>results.txt
echo 搜索完毕
del temp.txt
echo.
echo.
echo continue...
echo %filename%
echo.
echo.======================================
goto loop
pause>nul

:end
pause

exit
搜索完的关键字被转移到了一个叫done.log的日志文件中,搜索的结果保存在results.txt中

3.拷贝搜索结果:
for /f "delims=" %%i in (results.txt) do copy %%i "E:\test"
因为能力有限,而且是学习论坛中相关帖子写出来的,所以程序难免有些简陋,
目前存在部分问题:
1.变量%filename%为空时的传递问题,只能加个小尾巴“end”。(很笨拙的方法 !-_- )
2.如果关键字中含有“&”类型的字符程序就会出错...

如有什么疏漏的部分,还望各位大哥批评指正!!    :)
作者: yishanju     时间: 2009-2-5 00:30
推荐你有机会也尝试用一下这几个工具:http://baiy.cn/