中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 11:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [分享]多关键字自动批量搜索
楼 主 [分享]多关键字自动批量搜索 发表于 2009-02-04 18:07 ·  中国 辽宁 大连 联通
初级用户
积分 34
发帖 11
注册 2006-12-19 03:37
UID 73911
性别 男
状态 离线
工作需要,要在上百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.如果关键字中含有“&”类型的字符程序就会出错...

如有什么疏漏的部分,还望各位大哥批评指正!! :)
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
HAT +8 2009-02-04 18:52
yishanju +8 2009-02-05 00:28
2 发表于 2009-02-05 00:30 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
UID 55770
状态 离线
推荐你有机会也尝试用一下这几个工具:http://baiy.cn/
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
judas +1 2009-02-05 09:29

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
论坛跳转: