搜索添加和替换批处理

时间:2012-03-19 20:06:37

标签: batch-file cmd

我需要一个批处理文件来搜索字符串“Gen_1_X”。当找到字符串并让“X”为“4”时,脚本将在之前和之后添加“Gen_1_3”和“Gen_1_5”。基本上从原始数字中添加和减去一个,并相应地在之前和之后添加新条目。第一个代码块是最终产品应该是什么样子。第二个块是您必须使用的。

<span class="O verse Gen_1_3" data-osis="Gen.1.3"><span class="verse-num v-4">4&nbsp;
<span class="O verse Gen_1_4" data-osis="Gen.1.4"><span class="verse-num v-4">4&nbsp;    </span></span>
<span class="O verse Gen_1_5" data-osis="Gen.1.5"><span class="verse-num v-4">4&nbsp;

<span class="O verse Gen_1_5" data-osis="Gen.1.5"><span class="verse-num v-5">5&nbsp;</span></span>
<span class="O verse Gen_1_6" data-osis="Gen.1.6"><span class="verse-num v-6">6&nbsp;</span></span>
<span class="O verse Gen_1_7" data-osis="Gen.1.7"><span class="verse-num v-7">7&nbsp;</span></span>
<span class="O verse Gen_1_8" data-osis="Gen.1.8"><span class="verse-num v-8">8&nbsp;</span></span>
<span class="O verse Gen_1_9" data-osis="Gen.1.9"><span class="verse-num v-9">9&nbsp;</span></span>

1 个答案:

答案 0 :(得分:0)

@echo off
setlocal EnableDelayedExpansion
call :processFile < inputFile.ext > outputFile.ext
goto :EOF

:processFile
   set line=EOF
   set /P line=
   if "!line!" == "EOF" goto :EOF
   set X=
   set "lineNoGen=!line:Gen_1_=$!"
   if "!lineNoGen!" neq "!line!" (
      for /F "tokens=1-3 delims=$" %%a in ("!lineNoGen:Gen.1.=$!") do (
         set "beforeGen=%%a"
         set "betweenGens=%%b"
         set "afterGen=%%c"
         set "X=!betweenGens:~0,1!"
         set /A Xm1=X-1, Xp1=X+1
         echo !beforeGen!Gen_1_!Xm1!!betweenGens:~1!Gen.1.!Xm1!!afterGen:~1!
      )
   )
   echo !line!
   if defined X (
      echo !beforeGen!Gen_1_!Xp1!!betweenGens:~1!Gen.1.!Xp1!!afterGen:~1!
   )
goto :processFile

注意:

1-上一个批处理文件在输入文件的第一个空行结束。如果需要,这可以解决。

2-输入行有一些限制。有些可能会被解决,但有些则无法解决。请进行测试并报告结果。

3-我认为输入行没有$字符。如果是这样,请将批处理文件中的$更改为另一个未使用的字符。

编辑:我修复了一个不会更新Gen.1.X部分中的数字的小错误。