[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】文本的批量循环匹配并写入到新文件的批处理问题

各位论坛的大佬新年好!

一、源文件夹里面有很多文件夹,有些是多层路径,有很多txt文件。比如某个文件夹下面的某个txt文件的某一行的数据是90989abc123123 *\、,.u1kj2-|k12k

二、我这里有个“清单.txt”,比如第一行数据是abc

三、我的目的:
1>拿“清单.txt”的第一行“【abc】去源文件夹里的每一层文件夹里的每一个文件夹里的每一个txt文件的每一行去搜索,只要某一行的数据是包含了【abc】的就算匹配到了,上述例子中【90989abc123123 *\、,.u1kj2-|k12k】是包含【abc】的,就算是匹配到了。
2>匹配到了之后把【abc】和【90989abc123123 *\、,.u1kj2-|k12k】都输出到一个新文件"清单匹配结果.txt"中的第一行。
3>如果源文件中的所有txt都没搜索到,那就输出“abc+未搜索到”。然后拿“清单.txt”的第二行数据继续去搜索。
4>以此类推,“清单.txt”里的所有数据搜索完即可。

四、注意:需要循环匹配,“清单.txt”的第一行去源文件夹里面所有的txt循坏搜索;“清单.txt”的第一行搜索完成之后循环拿第二行数据去搜索。

实例上传了百度网盘,链接:https://pan.baidu.com/s/1ZZwUCAW1_J_sWppxcp02dg 提取码:jc2b
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 77七 于 2023-1-29 21:22 编辑
  1. @echo off
  2. rem 先设置路径,需要引号,如 set 清单="D:\清单.txt"
  3. set 源文件夹=
  4. set 清单=
  5. cd /d %源文件夹%
  6. for /f "delims=" %%a in ('type %清单%') do (
  7.         set n=
  8.         for /f "delims=" %%b in ('dir /b /s /a-d *.txt') do (
  9.                 for /f "delims=" %%c in ('type "%%~fb" ^| find "%%a"') do (
  10.                         echo %%a %%c %%~fb
  11.                         set n=1
  12.                 )
  13.         )
  14.         if not defined n (
  15.                 echo %%a 未搜索到
  16.         )
  17. )>>"%~dp0"结果.txt
  18. pause
复制代码

试试能行吗
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 2# 77七


    大佬,感谢!可以使用,不过能否再加一个要求,就是匹配到的话,输出内容的后面再加一个内容,就是匹配到的内容所在路径及他的文件名

TOP

回复 3# 304802301

已修改
bat小白,请多指教!谢谢!

TOP

回复 4# 77七


    感谢大佬,新年愉快

TOP

回复 5# 304802301


   不用客气,新年快乐!
bat小白,请多指教!谢谢!

TOP

这样效率高点
  1. @echo off
  2. set "源文件夹=%~dp0源文件夹"
  3. set "清单=清单.txt"
  4. (for /f "delims=" %%i in (清单.txt) do (
  5.      (for /f "tokens=1,2*delims=:" %%a in ('findstr /is "%%i" "%源文件夹%\*.txt"') do (
  6.           echo %%i %%c %%a:%%b
  7.      ))||echo %%i 未搜索到
  8. ))>结果.txt
  9. pause
复制代码

TOP

这样效率高点
terse 发表于 2023-1-30 15:59



    感谢感谢

TOP

返回列表