Board logo

标题: 【已解决】10元求批处理提取合并文本 [打印本页]

作者: lxh623    时间: 2018-11-16 18:18     标题: 【已解决】10元求批处理提取合并文本

E:\duanwenxue\WENZANG和E:\duanwenxue\shige下面有不少三级四级五级文件夹(有些可能没有文本文件)。
我想把每一个文本文件提取特征字符之间的内容,并合并每一个文件夹为一个文本,名字就是文件夹名。只合并到当前级别,批处理出来的文本不再合并。
前特征字符是“>文章内容”,后特征字符是“短文学微信号:duanwenxuewang”,最后不包括特征字符。原文本其他内容不动。
谢谢!
作者: WHY    时间: 2018-11-16 19:46

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
复制代码

作者: yhcfsr    时间: 2018-11-16 20:02

本帖最后由 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. }
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2