我需要一个批处理文件来搜索字符串“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>
答案 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部分中的数字的小错误。