标题: [文本处理] 批处理如何批量查找文本内容中包含指定字符串的txt文件? [打印本页]
作者: nihaoareyou 时间: 2015-1-11 13:05 标题: 批处理如何批量查找文本内容中包含指定字符串的txt文件?
本帖最后由 pcl_test 于 2017-4-12 19:22 编辑
好几千个txt文本,怎么批量筛选txt内容中包含“姓名”的txt,是内容包含,不是文件名包含哦。
求大神指导!!!!
作者: mms0536 时间: 2015-1-11 13:41
for /r 遍历文件 find寻找,找到就把文件路径输出
作者: nihaoareyou 时间: 2015-1-11 13:48
大神,我是小白,不太明白,有代码吗?
作者: nihaoareyou 时间: 2015-1-11 13:50
回复 2# mms0536
大神,我是小白,不太明白,有代码吗?
作者: mms0536 时间: 2015-1-11 13:53
回复 4# nihaoareyou
那你把你的一个几个txt压缩上传看看,重要内容自己替换掉
作者: nihaoareyou 时间: 2015-1-11 14:05
回复 5# mms0536
比如这三个文件中,我想筛选出包含“姓名”的那个txt。
实际上,我有上万个txt。
作者: nihaoareyou 时间: 2015-1-11 14:10
回复 5# mms0536
比如这三个文件中,我想筛选出包含“姓名”的那个txt。
实际上,我有很多个txt。
作者: mms0536 时间: 2015-1-11 14:21
本帖最后由 mms0536 于 2015-1-11 14:22 编辑
回复 7# nihaoareyou
路径改成你的txt所在的目录
现在是把包含姓名的txt文件路径放到了d:\include_name.txt ,你要是向移动文件或者复制文件,自己修改下- @echo off
- setlocal EnableDelayedExpansion
- for /r "路径" %%a in (*.txt) do (
- find "姓名" %%a
- if "!errorlevel!"=="0" echo %%a >>d:\include_name.txt
- )
- setlocal DiskableDelayedExpansion
- echo 已完成,路径保存在d:\include_name.txt
- pause >nul
复制代码
作者: nihaoareyou 时间: 2015-1-11 14:32
回复 8# mms0536
感谢大神! 能直接将包含“姓名”的txt文件输出到指定文件夹内吗?要不然文件太多,我还需要一个一个查找复制出来,太费时了。
作者: mms0536 时间: 2015-1-11 14:37
- @echo off
- if not exist d:\include_name mkdir d:\include_name
- setlocal EnableDelayedExpansion
- for /r "路径" %%a in (*.txt) do (
- find "姓名" %%a
- if "!errorlevel!"=="0" copy %%a d:\include_name\*.* /y
- )
- setlocal DiskableDelayedExpansion
- echo 已完成,保存在d:\include_name\
- pause >nul
复制代码
回复 9# nihaoareyou
作者: tmplinshi 时间: 2015-1-11 14:44
建议直接用 findstr 找出所有包含“姓名”的文件,而不是每个文件都启动一次 find 或 findstr。复制代码
作者: nihaoareyou 时间: 2015-1-11 14:48
回复 10# mms0536
太感谢您了,大神!!!狂点赞!!!
愿您一切顺利,心想事成。
作者: mms0536 时间: 2015-1-11 14:55
回复 11# tmplinshi
谢谢,又学了一招...
findstr用的很少
目前水平就是堆叠命令,还没深入研究每个命令...
感谢指点
作者: nihaoareyou 时间: 2015-1-11 14:57
回复 11# tmplinshi
请问这个怎么具体操作呢?
作者: mms0536 时间: 2015-1-11 15:00
回复 12# nihaoareyou
你楼上才是大神,经过指点,优化后如下,你试试吧- @echo off
- for /f "delims=""" %%a in ('findstr /m /c:"姓名" "txt所在路径\*.txt"') do (
- copy %%a d:\include_name\*.*
- )
- echo 执行完毕
- pause >nul
复制代码
作者: mms0536 时间: 2015-1-11 15:06
本帖最后由 mms0536 于 2015-1-11 15:07 编辑
这个是启用了延时变量 然后能看出来在运行的- @echo off&setlocal EnableDelayedExpansion
- set i=0
- for /f "delims=""" %%a in ('findstr /m /c:"姓名" "txt所在路径\*.txt"') do (
- set /a i+=1
- copy %%a d:\include_name\*.*
- cls
- echo 已复制 !i!个文件 .
- )
- setlocal DisableDelayedExpansion
- echo 执行完毕
- pause >nul
复制代码
作者: nihaoareyou 时间: 2015-1-11 15:14
回复 15# mms0536
确实快了很多!领教了,都是大神!
作者: nihaoareyou 时间: 2015-1-11 15:17
回复 16# mms0536
“批量替换txt第一列和第三列”那个帖子也是我发的,您知道怎么操作吗?
所有txt的列数都是固定且相同的。
作者: DAIC 时间: 2015-1-11 17:37
复制代码
作者: DAIC 时间: 2015-1-11 17:41
回复 16# mms0536
第三行的 """ 改成 " 就行了吧
第五行的 *.* 可以省略吧
第五行的 %%a 加上双引号比较好吧
作者: mms0536 时间: 2015-1-11 17:44
回复 20# DAIC
嗯嗯 "delims="就可以了,
copy 后面不写*.* 确实可以
%%a加双引号防止空格或汉字
受教了
谢谢指点
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |