res2001
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору garri671 посмотри еще такой вариант: Код: @echo off setlocal enabledelayedexpansion set "max=10" set "allfile=.\1\txtall.txt" set "indir=.\1\" set "outdir=.\2\" del /f/q %allfile% for /l %%a in (1;1;%max%) do >>%allfile% type %indir%txt%%a.txt & >>%allfile% echo. set /a "count=0" for /f "tokens=*" %%a in (%allfile%) do set /a "count+=1" set /a "p=count/max" set /a "p1="count-p*max" set /a "tek=0" for /l %%a in (1;1;%max%) do ( if %%a leq %p1% (set /a "p2=p+1") else (set /a "p2=p") set /a "it=0" set "skp=!tek!" set /a "is=0" for /f "delims=" %%b in (%allfile%) do ( if !is! geq !tek! call :writefile %outdir%txt%%a.txt %%b set /a "is+=1" )) :writefile if !it! lss !p2! ( >>%1 echo.%2 set /a "it+=1" set /a "tek+=1" ) | Без дополнительных утилит. Сначала установи переменные max - количество файлов allfile - файл куда будут собираться все файлы indir - каталог входных файлов outdir - каталог где будут создаваться файлы. Кстати: сделать как ты пишешь, т.е. разделить поровну на все файлы, а в последнем остаток не получится - остаток может быть больше, чем количество строк в предыдущих файлах - не комильфо. Я сделал так - остаток раскидываю в первые несколько файлов по одной дополнительной строке. Например имеем 25 строк в итоговом файле, всего 10 файлов, в первых 5 файлах по 3 строки, в последних 5 - 2. На сколько быстро будет работать на больших объемах - х.з. Самому интересно. Протестируй, отпишись. Добавлено: wolf0425 Когда бился над вышеприведенным скриптом обнаружилась одна странность, оказалось, что в for /f в опциях нельзя вставлять переменные. Я пробовал заюзать переменный skip - постоянно вылазила ошибка с непредвиденным появлением чего-либо (for /f "skip=%vv%" ...). Может что не так делал? Пробовал экранировать и двойные % и использовать ! вместо процентов - пофиг. | Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 09:03 21-07-2010 | Исправлено: res2001, 10:35 21-07-2010 |
|