找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19858|回复: 2

【已解决】10元求批处理提取合并文本

  [复制链接]
发表于 2018-11-16 18:18:54 | 显示全部楼层 |阅读模式
E:\duanwenxue\WENZANG和E:\duanwenxue\shige下面有不少三级四级五级文件夹(有些可能没有文本文件)。
我想把每一个文本文件提取特征字符之间的内容,并合并每一个文件夹为一个文本,名字就是文件夹名。只合并到当前级别,批处理出来的文本不再合并。
前特征字符是“>文章内容”,后特征字符是“短文学微信号:duanwenxuewang”,最后不包括特征字符。原文本其他内容不动。
谢谢!
发表于 2018-11-16 19:46:23 | 显示全部楼层
test.bat
保存到 E:\duanwenxue 目录下,双击运行。
  1. @echo off
  2. PowerShell "dir -Literal '%~dp0' -Filter *.txt -Recurse|group DirectoryName|%%{$name=$_.Name -replace '.*\\([^\\]+)$','$1.Log';$arr=$_.Group|%%{$m=[IO.File]::ReadAllText($_.FullName,[Text.Encoding]::Default) -match '(?<=>文章内容)[\s\S]*(?=短文学微信号:duanwenxuewang)';If($m){$matches[0]}};sc -Literal ('%~dp0'+$name) -Value $arr}"
  3. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!请查收。

查看全部评分

发表于 2018-11-16 20:02:27 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-11-16 21:04 编辑

保存为BAT,放在母目录执行.
这里的多级目录是按全路径来计算的,也就是说E:\duanwenxue是一级目录
  1. @set @n=0/*&echo off
  2. dir /ad/s/b|cscript -nologo -e:jscript "%~f0"
  3. pause&exit /b */
  4. var fso=new ActiveXObject('scripting.FileSystemObject');
  5. var re_prefix=new RegExp(">文章内容","gim");
  6. var re_suffix=new RegExp("短文学微信号:duanwenxuewang","gim");
  7. while(!WSH.StdIn.AtEndOfStream)
  8. {
  9.     dir=WSH.StdIn.ReadLine();
  10.     var count=0;
  11.     dir.replace(/\\/g,function (){
  12.         count++;
  13.     });
  14.     if(count<3||count>5) continue;
  15.     getFiles(fso,dir);
  16. }
  17. //目录下文件   
  18. function getFiles(fso,spDir){
  19.         var fd=fso.GetFolder(spDir);
  20.     var curDir=spDir.replace(/.*\\([^\\]*)/gi,'$1');
  21.     var out   =spDir.replace(/\\/gi,'/')+'/'+curDir+'.txt';

  22.         var fc=new Enumerator(fd.files);
  23.     var result='';
  24.         for(;!fc.atEnd();fc.moveNext())   
  25.         {   
  26.                 file=fc.item();
  27.         ext=file.replace(/.*\\[^\\]*?([^.]*)$/,'$1');
  28.         if(ext!='txt') continue;
  29.         fo=fso.OpenTextFile(file,1);
  30.         var flag=0;
  31.         while(!fo.AtEndOfStream)
  32.         {
  33.             line=fo.ReadLine();
  34.             if(!line||line.match(/^\s+$/)) continue;
  35.             if (line.match(re_suffix)) break;
  36.             if(flag==1) result+=line+'\r\n';
  37.             if(line.match(re_prefix)) flag=1;
  38.         }
  39.         fo.close();
  40.         result+='\r\n';
  41.         }
  42.     fo=fso.OpenTextFile(out,2,true);
  43.     fo.Write(result);
  44.     fo.close();
  45. }
复制代码

评分

参与人数 1技术 +1 收起 理由
lxh623 + 1 谢谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 06:49 , Processed in 0.019046 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表