我需要一个批处理文件,它将搜索字符串"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
<span class="O verse Gen_1_4" data-osis="Gen.1.4"><span class="verse-num v-4">4 </span></span>
<span class="O verse Gen_1_5" data-osis="Gen.1.5"><span class="verse-num v-4">4
<span class="O verse Gen_1_5" data-osis="Gen.1.5"><span class="verse-num v-5">5 </span></span>
<span class="O verse Gen_1_6" data-osis="Gen.1.6"><span class="verse-num v-6">6 </span></span>
<span class="O verse Gen_1_7" data-osis="Gen.1.7"><span class="verse-num v-7">7 </span></span>
<span class="O verse Gen_1_8" data-osis="Gen.1.8"><span class="verse-num v-8">8 </span></span>
<span class="O verse Gen_1_9" data-osis="Gen.1.9"><span class="verse-num v-9">9 </span></span>发布于 2012-03-20 07:53:04
@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-我假设输入行没有$字符。如果是,请将批处理文件中的$更改为另一个未使用的字符。
编辑:我修复了一个小bug,它不能更新Gen.1.X部件中的数字。
https://stackoverflow.com/questions/9777092
复制相似问题