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

[文本处理] 批处理如何删除指定文本中特定文字区域内的重复行(只保留一个),并替换特定行内容

本帖最后由 pcl_test 于 2016-8-21 10:15 编辑

批处理对指定文本文件去除重复的行,并删除“ECHO处理关闭状态”

1.bat 和1.txt处于同目录下。

1.txt文本示例:

***********订单编号***********
XSDD-20160726-0001
XSDD-20160726-0001
XSDD-20160726-0001

***********客户姓名***********
陈大人
陈大人
陈大人

*************地址*************
大星村
大星村
大星村

***********商品名称***********
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]

*************规格*************
32型号
32型号
ECHO 处于关闭状态。
*************型号*************
ECHO 处于关闭状态。
ECHO 处于关闭状态。
ECHO 处于关闭状态。
*************金额*************
300.0000
300.0000
300.0000

***********订单状态***********
红冲
红冲
红冲




要求:运行1.bat后
         ① 对1.txt中行内容为“ECHO处于关闭状态。”的该行内容替换为“无”
         ② 对从“订单编号”该行到“规格”该行,以及“金额”该行至文末,判断每行内容是否重复,对内容重复的行,清空内容并删除该行。(注:若重复内容为“无”,则不进行替换
         处理后的文本内容,覆盖写入1.txt即可




最终文本示例:

***********订单编号***********
XSDD-20160726-0001
***********客户姓名***********
陈大人
*************地址*************
大星村
***********商品名称***********
[旺旺某商品,1.00台];[旺旺某商品,1.00台] [旺旺某商品,1.00台]
*************规格*************
32型号
32型号

*************型号*************



*************金额*************
300.0000
***********订单状态***********
红冲
1

评分人数

    • pcl_test: 发帖前先使用论坛搜索PB -4

回复 4# xiaomu


把第一行改成这样试试:
//&cls&cscript -nologo -e:jscript "%~f0"<"1.txt">"2.txt"&pause&move /y "2.txt" "1.txt"&exit

TOP

回复 2# pcl_test


    版主大哥。能不能将最终的文本内容覆盖到1.txt

TOP

回复 2# pcl_test


    谢谢版主大大的答复。
    我是纯新手。有劳版主大大日后多多帮忙了。。。
    再次感谢!

TOP

只想说对“ECHO处于关闭状态。”的处理可直接在生成txt的批处理里修改,甚至去重也是
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"1.txt"&pause&exit
  2. function uniq(str){
  3.     var t=str.split(/\r?\n/),a={},s='';
  4.     for(var i=0;i<t.length;i++){
  5.         var r=t[i].replace(/^\s*|\s*$/g,'');
  6.         if(r!='无'){if(!a[r]){s+=r+'\r\n';a[r]=1}}else s+=r+'\r\n';
  7.     }
  8.     return s.replace(/\s*$/,'');
  9. }
  10. var text = WSH.StdIn.ReadAll().replace(/ECHO 处于关闭状态。/g,'无')
  11.     .replace(/(^[\s\S]+?\*+规格\*+)([\s\S]+?)(\*+金额\*+[\s\S]+?$)/,
  12.         function(a,b,c,d){return uniq(b)+c+uniq(d);});
  13. WSH.echo(text);
复制代码

TOP

返回列表