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

[文本处理] 批处理如何在指定字符后面插入/添加递增的数字序号

[复制链接]
发表于 2017-6-4 22:45:22 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2017-6-5 09:34 编辑

寻找批处理代码或者可以实现此功能的软件
文本内容:
[]
dr=.vd
ort=50
nt=

[]
dr=.vd
ort=50
nt=

[]
dr=.vd
ort=50
nt=

将所有[替换为[123,或者说是从[这个字符后面添加123,
123为递增的数字,数字从123开始。

想要的结果:
[123]
dr=.vd
ort=50
nt=

[124]
dr=.vd
ort=50
nt=

[125]
dr=.vd
ort=50
nt=
发表于 2017-6-5 08:42:44 | 显示全部楼层

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,* delims=:" %%x in ('findstr /n .* a.txt') do (
  4.     set "line=%%y"
  5.     if defined line (
  6.         if "!line!"=="[]" (
  7.             set /a n+=1
  8.             echo;[12!n!]
  9.         ) else (
  10.             echo;%%y
  11.         )
  12.     ) else echo;
  13. )
  14. pause
复制代码
发表于 2017-6-5 12:14:18 | 显示全部楼层
本帖最后由 老刘1号 于 2017-6-5 12:19 编辑

回复 2# taofan712


    你大前天说的话这么快就忘了?
 楼主| 发表于 2017-6-5 14:43:37 | 显示全部楼层
本帖最后由 danxiong 于 2017-6-5 16:34 编辑

回复 2# taofan712


    非常感谢,问题不完美解决,发现数字数到129之后不是130而是1210,这就不对了。
再补充个问题,我在代码倒数第二行加了>>=b.txt 发现结果是重复运行后将结果添加到原先的文件,怎样让再次运行bat后生成的b.txt是覆盖而不是添加?
发表于 2017-6-5 19:37:14 | 显示全部楼层
回复 4# danxiong
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=123
  4. (for /f "tokens=1,* delims=:" %%x in ('findstr /n .* a.txt') do (
  5.     set "line=%%y"
  6.     if defined line (
  7.         if "!line!"=="[]" (
  8.             echo;[!n!]
  9.             set /a n+=1
  10.         ) else (
  11.             echo;%%y
  12.         )
  13.     ) else echo;
  14. ))>b.txt
复制代码
 楼主| 发表于 2017-6-6 05:54:19 | 显示全部楼层
回复 5# ShowCode


    非常感谢,已经完全解决了,效果很好。
 楼主| 发表于 2017-6-6 14:36:26 | 显示全部楼层
回复 5# ShowCode


    再请教高手,我又试着用这代码处理其它文件,发现无法处理,像这个
<Reg name="aaaaa" id="1">
        <e name="1000">
            <ID />
            <Port>3550</Port>
            <eName>1000</eName>
            
    <Reg name="aaaaa" id="1">
        <e name="1000">
            <ID />
            <Port>3550</Port>
            <eName>1000</eName>
            
    <Reg name="aaaaa" id="1">
        <e name="1000">
            <ID />
            <Port>3550</Port>
            <eName>1000</eName>
将1000递增数字,是不是因为特殊字符的原因无法处理呢?
发表于 2017-6-6 15:10:40 | 显示全部楼层
回复 7# danxiong


<e name="1000">
<eName>1000</eName>
两个地方都需要改吗?
发表于 2017-6-6 15:14:12 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=1000
  4. (for /f "tokens=1,* delims=:" %%x in ('findstr /n .* a.txt') do (
  5.     set "line=%%y"
  6.     if defined line (
  7.         if "!line:e name=!" equ "!line!" (
  8.             if "!line:eName=!" equ "!line!" (
  9.                 echo,%%y
  10.             ) else (
  11.                 echo            ^<eName^>!n!^</eName^>
  12.                 set /a n+=1
  13.             )
  14.         ) else (
  15.             echo        ^<e name="!n!"^>
  16.             REM set /a n+=1
  17.         )
  18.     ) else (
  19.         echo,
  20.     )
  21. ))>b.txt
复制代码

评分

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

查看全部评分

 楼主| 发表于 2017-6-7 14:30:11 | 显示全部楼层
回复 9# ShowCode


    再次感谢,经过多次测试,已经知道如何用这个代码处理其它文件了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 20:07 , Processed in 0.023017 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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