Board logo

标题: [文本处理] 批处理如何批量删除多个UTF-8编码的文本内的指定字符串(<>之间的内容)? [打印本页]

作者: 377563714    时间: 2013-11-4 19:55     标题: 批处理如何批量删除多个UTF-8编码的文本内的指定字符串(<>之间的内容)?

本帖最后由 pcl_test 于 2016-8-14 12:08 编辑

在同一目录中,有很多个 *.trc 文件,批处理怎么才能删除这些内容后按原文件名输出到另一个文件夹???

例如;

[00:04.81]<736>嘉<564>俊<500>出<438>品<438>,<434>必<754>属<936>精<3059>品
[00:12.37]<548>每<316>段<500>故<623>事<377>都<312>有<312>一<376>篇<500>剧<1180>情
[00:17.12]<740>每<376>段<560>爱<564>情<312>都<310>像<378>动<312>人<565>旋<1180>律
[00:22.12]<740>一<312>颗<564>真<624>心<312>却<312>只<312>向<374>着<566>你<686>前<621>进
[00:27.25]<612>也<377>许<559>爱 <312>越<376>单<564>纯<560>越<564>着<1369>迷

怎么把符号 <> 之间,包括符号“<>”也全部删除。不是替换,删除后不留任何空格或者符号,自己摸索了很久,还是不会,求大神帮忙了!!!!!
作者: 1270697389    时间: 2013-11-4 20:16

sed -r "s/<[^>]+>//g" 1.trc > 2.trc
下个sed.exe
作者: DAIC    时间: 2013-11-4 20:18

  1. sed -r -i "s/<[^>]+>//g" *.trc
复制代码

作者: foxJL    时间: 2013-11-4 20:21

  1. @echo off & setlocal enabledelayedexpansion
  2. for %%b in (*.trc) do (
  3.   (for /f "delims=" %%a in (%%b) do (
  4.     set str=%%a&set str=!str: =!&set str=!str:^<= !
  5.     for %%i in (!str!) do (set v=%%i&set v=!v:*^>=!&set/p=!v!<nul)
  6.     echo,
  7.   ))>>%%b_1.trc
  8. )
  9. pause
复制代码

作者: xxpinqz    时间: 2013-11-4 20:22

  1. @echo off
  2. set "dst=e:\111\"
  3. md "%dst%" 2>nul
  4. for %%i in (*.trc) do (
  5.   (for /f "usebackq tokens=1* delims=]" %%a in ("%%i") do (
  6.      setlocal enabledelayedexpansion
  7.      if not "%%b"=="" (
  8.       set "str=]%%b"
  9.         for %%a in (0 1 2 3 4 5 6 7 8 9 ^< ^>) do set "str=!str:%%a=!"
  10.      )
  11.      echo,%%a!str!
  12.      endlocal
  13.   ))>"%dst%%%i"
  14. )
复制代码

作者: 377563714    时间: 2013-11-4 20:32

新写入的文件怎么是空文件啊?系统是W7的 4# foxJL
作者: foxJL    时间: 2013-11-4 20:39

回复 6# 377563714


我也是WIN7系统,测试了没有问题
批处理文件和.trc文件放同一目录
作者: foxJL    时间: 2013-11-4 20:40

把你的trc文件压缩一个传上来.
作者: 377563714    时间: 2013-11-4 20:44

是在同一目录的,就是写入的文件是空内容的 7# foxJL
作者: 377563714    时间: 2013-11-4 20:47

[attach]6864[/attach]回复 8# foxJL
作者: foxJL    时间: 2013-11-4 20:49

没有看到附件回复 10# 377563714
作者: 377563714    时间: 2013-11-4 20:49

回复 8# foxJL
作者: 377563714    时间: 2013-11-4 20:59

运行后就是这样的 11# foxJL
作者: foxJL    时间: 2013-11-4 21:00

又是UTF-8编码,纯P好像没办法.试试向别的高手请教VBS或PS吧
作者: 377563714    时间: 2013-11-4 21:05

谢谢版主的耐心帮助了 14# foxJL
作者: DAIC    时间: 2013-11-4 21:44

回复 12# 377563714


http://bbs.bathome.net/thread-27187-1-1.html
作者: happy886rr    时间: 2016-4-1 22:46

  1. fr *.trc -s -r:"<\d*>" /t:""
  2. fr *.trc -s -r:"\n" /t:"\r\n"
复制代码

作者: xp3000    时间: 2016-4-2 07:28

这个BAT+JS混编可以,我只能处理单个的不会批量,看看群里高手怎么写吧,要不然把原来帖子删除,取重点重发帖子一次

第一次正则表达式提取
(?=[一-龥\((]).{1,}([一-龥a-zA-Z,,!!\r\n]|\)))|(\d+<\d+>年)?(\d+<\d+>月)?(\d+<\d+>日)?
保存为TXT
第二次正则表达式替换
[\[ \]]|(<\d+>)
替换值为空白

处理成下面的状态,歌词之间原本有空格的没了感觉很奇怪

寂寞在唱歌
阿桑
天黑了孤独又慢慢割着
有人的心又开始疼了
爱很远了很久没再见了
就这样竟然也能活着
你听寂寞在唱歌
轻轻的恨恨的
歌声是这么残忍
让人忍不住泪流成河
......
作者: pcl_test    时间: 2016-8-14 20:45

  1. @echo off
  2. more +4 "%0" | mshta http://bathome.net/s/hta/ "eval(WSH.StdIn.ReadAll())"
  3. pause&exit
  4. dir().files().grep(/\.trc$/i)._each(
  5.     function(file){
  6.         bin=iconv.load(file);
  7.         bom=iconv.checkBom(bin);
  8.         if(bom=='undefined')bom=iconv.toStr(bin,'gb2312')?'gb2312':'utf-8';
  9.         text=iconv.toStr(bin,bom);
  10.         text=text.replace(/<[^<]*>/g,'');
  11.         iconv.saveText(text,'New_'+file,bom)
  12.     }
  13. )
复制代码





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