Board logo

标题: [文本处理] 批处理如何批量查找文本内容中包含指定字符串的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 ,你要是向移动文件或者复制文件,自己修改下
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /r "路径" %%a in (*.txt) do (
  4. find "姓名" %%a
  5. if "!errorlevel!"=="0" echo %%a >>d:\include_name.txt
  6. )
  7. setlocal DiskableDelayedExpansion
  8. echo 已完成,路径保存在d:\include_name.txt
  9. pause >nul
复制代码

作者: nihaoareyou    时间: 2015-1-11 14:32

回复 8# mms0536


    感谢大神! 能直接将包含“姓名”的txt文件输出到指定文件夹内吗?要不然文件太多,我还需要一个一个查找复制出来,太费时了。
作者: mms0536    时间: 2015-1-11 14:37

  1. @echo off
  2. if not exist d:\include_name mkdir d:\include_name
  3. setlocal EnableDelayedExpansion
  4. for /r "路径" %%a in (*.txt) do (
  5. find "姓名" %%a
  6. if "!errorlevel!"=="0" copy %%a d:\include_name\*.* /y
  7. )
  8. setlocal DiskableDelayedExpansion
  9. echo 已完成,保存在d:\include_name\
  10. pause >nul
复制代码
回复 9# nihaoareyou
作者: tmplinshi    时间: 2015-1-11 14:44

建议直接用 findstr 找出所有包含“姓名”的文件,而不是每个文件都启动一次 find 或 findstr。
  1. findstr /m /c:"姓名" *.txt
复制代码

作者: 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


    你楼上才是大神,经过指点,优化后如下,你试试吧
  1. @echo off
  2. for /f "delims=""" %%a in ('findstr /m /c:"姓名" "txt所在路径\*.txt"') do (
  3. copy %%a d:\include_name\*.*
  4. )
  5. echo 执行完毕
  6. pause >nul
复制代码

作者: mms0536    时间: 2015-1-11 15:06

本帖最后由 mms0536 于 2015-1-11 15:07 编辑

这个是启用了延时变量 然后能看出来在运行的
  1. @echo off&setlocal EnableDelayedExpansion
  2. set i=0
  3. for /f "delims=""" %%a in ('findstr /m /c:"姓名" "txt所在路径\*.txt"') do (
  4. set /a i+=1
  5. copy %%a d:\include_name\*.*
  6. cls
  7. echo 已复制 !i!个文件 .
  8. )
  9. setlocal DisableDelayedExpansion
  10. echo 执行完毕
  11. 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

  1. findstr /m "姓名" *.txt
复制代码

作者: 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