Board logo

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

作者: danxiong    时间: 2017-6-4 22:45     标题: 批处理如何在指定字符后面插入/添加递增的数字序号

本帖最后由 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=
作者: taofan712    时间: 2017-6-5 08:42

  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
复制代码

作者: 老刘1号    时间: 2017-6-5 12:14

本帖最后由 老刘1号 于 2017-6-5 12:19 编辑

回复 2# taofan712


    你大前天说的话这么快就忘了?
作者: danxiong    时间: 2017-6-5 14:43

本帖最后由 danxiong 于 2017-6-5 16:34 编辑

回复 2# taofan712


    非常感谢,问题不完美解决,发现数字数到129之后不是130而是1210,这就不对了。
再补充个问题,我在代码倒数第二行加了>>=b.txt 发现结果是重复运行后将结果添加到原先的文件,怎样让再次运行bat后生成的b.txt是覆盖而不是添加?
作者: ShowCode    时间: 2017-6-5 19:37

回复 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
复制代码

作者: danxiong    时间: 2017-6-6 05:54

回复 5# ShowCode


    非常感谢,已经完全解决了,效果很好。
作者: danxiong    时间: 2017-6-6 14:36

回复 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递增数字,是不是因为特殊字符的原因无法处理呢?
作者: ShowCode    时间: 2017-6-6 15:10

回复 7# danxiong


<e name="1000">
<eName>1000</eName>
两个地方都需要改吗?
作者: ShowCode    时间: 2017-6-6 15:14

  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
复制代码

作者: danxiong    时间: 2017-6-7 14:30

回复 9# ShowCode


    再次感谢,经过多次测试,已经知道如何用这个代码处理其它文件了。




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