Доброго времени суток.
Имеется текстовый файл, количество строк в исходном тексте неизвестно, может пятьдесят, а может тысыча.
Нужно разбить его на несколько частей, так, чтобы количество строк в выходных файлах было одинаково (ну ± одна строка). Количество частей задается в самом батнике.
Поскольку я плохо разбираюсь в CMD, навалял такую белиберду на пять частей:
spoiler:movech
for %%I in (list.txt) do if %%~zI==0 (goto exit)
@echo off
setlocal enabledelayedexpansion
set file=list.txt
set first=1
set second=1
set out=V_Obrabotku1.txt
set counter=0
<nul set /p x=>>"%out%"
for /f "usebackq tokens=*" %%A IN ("%file%") DO (
set /a counter=!counter!+1
if !counter! GEQ %first% (
if !counter! LEQ %second% (
echo.%%A>>"%out%"
)
)
)
set n=1
set File_Src=list.txt
set file_Dest=textfile_out.txt
more +%n% < "%File_Src%" > "%file_Dest%"
move /y textfile_out.txt list.txt
::V_Obrabotku2
set file=list.txt
set first=1
set second=1
set out=V_Obrabotku2.txt
set counter=0
<nul set /p x=>>"%out%"
for /f "usebackq tokens=*" %%A IN ("%file%") DO (
set /a counter=!counter!+1
if !counter! GEQ %first% (
if !counter! LEQ %second% (
echo.%%A>>"%out%"
)
)
)
set n=1
set File_Src=list.txt
set file_Dest=textfile_out.txt
more +%n% < "%File_Src%" > "%file_Dest%"
move /y textfile_out.txt list.txt
::V_Obrabotku3
set file=list.txt
set first=1
set second=1
set out=V_Obrabotku3.txt
set counter=0
<nul set /p x=>>"%out%"
for /f "usebackq tokens=*" %%A IN ("%file%") DO (
set /a counter=!counter!+1
if !counter! GEQ %first% (
if !counter! LEQ %second% (
echo.%%A>>"%out%"
)
)
)
set n=1
set File_Src=list.txt
set file_Dest=textfile_out.txt
more +%n% < "%File_Src%" > "%file_Dest%"
move /y textfile_out.txt list.txt
::V_Obrabotku4
set file=list.txt
set first=1
set second=1
set out=V_Obrabotku4.txt
set counter=0
<nul set /p x=>>"%out%"
for /f "usebackq tokens=*" %%A IN ("%file%") DO (
set /a counter=!counter!+1
if !counter! GEQ %first% (
if !counter! LEQ %second% (
echo.%%A>>"%out%"
)
)
)
set n=1
set File_Src=list.txt
set file_Dest=textfile_out.txt
more +%n% < "%File_Src%" > "%file_Dest%"
move /y textfile_out.txt list.txt
::V_Obrabotku5
set file=list.txt
set first=1
set second=1
set out=V_Obrabotku5.txt
set counter=0
<nul set /p x=>>"%out%"
for /f "usebackq tokens=*" %%A IN ("%file%") DO (
set /a counter=!counter!+1
if !counter! GEQ %first% (
if !counter! LEQ %second% (
echo.%%A>>"%out%"
)
)
)
set n=1
set File_Src=list.txt
set file_Dest=textfile_out.txt
more +%n% < "%File_Src%" > "%file_Dest%"
move /y textfile_out.txt list.txt
Goto movech
:exit
Скрипт работает, но уж больно громоздкий, да и тысячу строк довольно долго обрабатывает.
Подскажите, пожалуйста, более изящное решение. Заранее спасибо.