@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.