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

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

本帖最后由 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>
……
……

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

TOP

本帖最后由 wzf1024 于 2016-2-20 12:10 编辑

回复 2# bailong360


    不知道为什么bat在xp下没有作用捏,大侠,需要什么条件吗?第三方软件?

TOP

回复 3# wzf1024
第三方gawk

TOP

回复 4# bailong360


   喔~我是小菜,不懂用gawk

TOP

本帖最后由 ivor 于 2016-2-20 14:32 编辑

回复 5# wzf1024

for /f ……
    试了一次echo %%a | find "HR",总提示文件找不到,服了,单条命令在CMD上就可以
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 5# wzf1024
下载后与批处理放在同一目录下
或者放到'Windows'文件夹下,其他的不用你管

TOP

回复 7# bailong360


    只能操作每行的第一个目标字符,行内多于1次的重复无效。见附件例子

TOP

和这贴不差不多吗 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

评分人数

TOP

回复 9# bailong360


   如何同时操作子文件夹内的文件?非常感谢

TOP

喔,知道了,加个/s

TOP

返回列表