Вы можете использовать читатель чанка, он разбивает каждую строку на куски с максимальным размером 1023 символа каждый.
@echo off
setlocal EnableDelayedExpansion
set pos=0
set line=
<long_text.txt (
FOR /F "tokens=1 delims=:" %%1 in ('findstr /o "^" long_text.txt') DO (
set new_pos=%%1
set /a size=new_pos-pos
set /a "chunks=(size-1+1022) / 1023"
if defined line echo Line: !line! chunks=!chunks!
set /a pos=new_pos
for /L %%# in (1 1 !chunks!) do (
set "partial="
set /p partial=
if defined partial (
echo #!line! chunk %%# -- !partial:~0,10! ... !partial:~-10!
)
)
set /a line+=1
)
)
Как это работает
Внешний FOR /F .. findstr /O
l oop используется для определения длины каждой строки путем вычисления позиционной разницы между двумя линиями.
Длина строки используется для вычисления количества кусков , которые необходимо прочитать, чтобы получить всю строку ,
Сама строка читается set /p
(она читает из перенаправления <long_text.txt
). set /p
имеет ограничение в 1023 символа.
Поэтому set /p
используется чанк раз.
Чтобы рассчитать, сколько кусков используется для одной строки, длину строки нужно разделить на 1023, но нужно вычесть 1 символ, потому что LF не считается (но CR). +1022
является результатом того факта, что остальные символы после последнего complete чанка должны быть прочитаны тоже.
Последний чанк может быть пустым, если строка кратна 1023 (также пустая строка).
Единственная оставшаяся точка - последняя строка.
Последняя строка не будет прочитана этим методом, но достаточно легко добавить одну пустую строку раньше.