Предполагается, что файл отформатирован с пробелами (без табуляции):
@echo off
setlocal enabledelayedexpansion
(for /f "delims=" %%a in (tmp1.txt) do (
set "line=%%a"
set "col1=!line:~0,3!"
set "col2=!line:~3,5!"
set "rest=!line:~8!"
if "!col1!" == " " (
set "col1=!old1!"
) else (
set "old1=!col1!"
)
if "!col2!" == " " (
set "col2=!old2!"
) else (
set "old2=!col2!"
)
echo !col1!!col2!!rest!
))>tmp2.txt
Вы заметите, я не разбиваю строки на токены с for /f
, а беру строки в целоми «разделить» их вручную, чтобы сохранить формат (длину подстроки).Затем просто замените «пустые значения» на сохраненное значение из строки ранее.
Редактировать в ответ на I have made a mistake when pasting the original text. There are 4 (empty) spaces before all lines.
:
Адаптировать подсчет следующим образом (первый токен увеличивает длину на 4
, для остальных добавьте 4
в начальную позицию, оставьте длины неизменными):
set "col1=!line:~0,7!"
set "col2=!line:~7,5!"
set "rest=!line:~12!"
и адаптируйте if "!col1!" == " " (
к if "!col1!" == " " (
(от трех до семи пробелов)