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

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

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

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

TOP

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

回复 2# taofan712


    你大前天说的话这么快就忘了?

TOP

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

回复 2# taofan712


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

TOP

回复 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
复制代码
测试代码之前请做好备份

TOP

回复 5# ShowCode


    非常感谢,已经完全解决了,效果很好。

TOP

回复 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递增数字,是不是因为特殊字符的原因无法处理呢?

TOP

回复 7# danxiong


<e name="1000">
<eName>1000</eName>
两个地方都需要改吗?
测试代码之前请做好备份

TOP

  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

评分人数

测试代码之前请做好备份

TOP

回复 9# ShowCode


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

TOP

返回列表