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

[文本处理] 【已解决】批处理如何给txt中指定重复出现的字符串加上系列数字后缀?

[复制链接]
发表于 2016-2-19 20:57:31 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-9-30 23:01 编辑

有很多txt,存在某字符串重复出现的情况,需要给每个txt中重复出现的该词后缀序号,每三个增加1。
如下文本,字符串hide重复出现n次,在第一段出现3次,第2段中出现3次,类推……
如何将前3个hide替换为hide_1;之后的3个替换为hide_2;…………每3次一组,后缀序号相同,之后后缀序号加1
----------------------------------
第1段文本:
<input id="hide"
<div id="hide"
<span id="hide"
<HR>
第2段文本:
<input id="hide"
<div id="hide"
<span id="hide"
<HR>
……
……
---------------------------------
替换后为:
--------------------------------------------
第1段文本:
<input id="hide_1"
<div id="hide_1"
<span id="hide_1"
<HR>
第2段文本:
<input id="hide_2"
<div id="hide_2"
<span id="hide_2"
<HR>
……
……
发表于 2016-2-20 10:54:09 | 显示全部楼层
本帖最后由 bailong360 于 2016-2-20 10:55 编辑
  1. #&gawk -f %0 *.txt&exit
  2. Fname != FILENAME{n=num=0;Fname=FILENAME}
  3. {
  4.     if($0 ~ "hide") {
  5.         num+=!(n%3)
  6.         sub("hide", "hide""_"num)
  7.         n+=1
  8.     }
  9.     print>"New_"FILENAME
  10. }
复制代码
 楼主| 发表于 2016-2-20 11:42:57 | 显示全部楼层
本帖最后由 wzf1024 于 2016-2-20 12:10 编辑

回复 2# bailong360


    不知道为什么bat在xp下没有作用捏,大侠,需要什么条件吗?第三方软件?
发表于 2016-2-20 12:35:43 | 显示全部楼层
回复 3# wzf1024
第三方gawk
 楼主| 发表于 2016-2-20 13:49:04 | 显示全部楼层
回复 4# bailong360


   喔~我是小菜,不懂用gawk
发表于 2016-2-20 14:13:41 | 显示全部楼层
本帖最后由 ivor 于 2016-2-20 14:32 编辑

回复 5# wzf1024

for /f ……
    试了一次echo %%a | find "HR",总提示文件找不到,服了,单条命令在CMD上就可以
发表于 2016-2-20 16:07:56 | 显示全部楼层
回复 5# wzf1024
下载后与批处理放在同一目录下
或者放到'Windows'文件夹下,其他的不用你管
 楼主| 发表于 2016-2-20 21:08:54 | 显示全部楼层
回复 7# bailong360


    只能操作每行的第一个目标字符,行内多于1次的重复无效。见附件例子
发表于 2016-2-21 10:08:39 | 显示全部楼层
和这贴不差不多吗 http://www.bathome.net/thread-39344-1-1.html
借2楼pcl的代码改一改
  1. //&cls&dir /a-d /b *.txt|cscript -nologo -e:jscript "%~f0"&pause & exit

  2. function reStr(file){
  3.     var f = fso.opentextfile(file, 1);
  4.     var n=0, num=0,str = f.ReadAll().replace(/hide/g, function($0){
  5.         num+=!(n%3);var t = $0+'_'+num;n++;return t
  6.     });
  7.     f.Close();
  8.     var f = fso.opentextfile(file, 2);
  9.     f.Write(str);
  10.    
  11. }
  12. var fso = new ActiveXObject('Scripting.FileSystemObject');
  13. while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码

评分

参与人数 1技术 +1 收起 理由
wzf1024 + 1 乐于助人

查看全部评分

 楼主| 发表于 2016-2-21 18:36:53 | 显示全部楼层
回复 9# bailong360


   如何同时操作子文件夹内的文件?非常感谢
 楼主| 发表于 2016-2-21 18:39:38 | 显示全部楼层
喔,知道了,加个/s
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 23:08 , Processed in 0.031247 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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