Tipulatoid
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Вот кусок из моего батника. Он выдирает из файлов писем *.eml (обычные текстовые файлы), создаваемых The Bat, аттачи и скармливает их утилите base64, которая приводит их в первозданый вид. Код: echo. echo Сохраняю решения Action1#.dau из импортированных писем. echo Это займет некоторое время . . . :: Определение файла настроек set file=send.ini :: %group_quan% задается раньше в батнике, обычно равно 7-8 for /l %%a in (1,1,%group_quan%) do ( set group_num=%%a del /q !group_num!maillist.del 2>nul set mail1_adress= set mail2_adress= set mail3_adress= set mail4_adress= set mail5_adress= for /f "skip=2 delims=]=, tokens=5-9" %%a in ('find "[Group %%a team #" %file%') do ( set mail1_adress=%%a set mail2_adress=%%b set mail3_adress=%%c set mail4_adress=%%d set mail5_adress=%%e ( if defined mail1_adress echo !mail1_adress! if defined mail2_adress echo !mail2_adress! if defined mail3_adress echo !mail3_adress! if defined mail4_adress echo !mail4_adress! if defined mail5_adress echo !mail5_adress! )>>!group_num!maillist.del ) for /f "skip=2 delims=] tokens=1*" %%a in ('find "[Group !group_num! mail name]" %file%') do ( set mail_name=%%b if exist !group_num!maillist.del move /y !group_num!maillist.del "%CD%\Inbox\!mail_name!\" 2>nul if exist "%CD%\Inbox\!mail_name!" pushd "%CD%\Inbox\!mail_name!" 2>nul if exist *.eml ( for /f %%a in ('dir *.eml /b /a:-d') do ( for /f %%a in ('findstr /g:!group_num!maillist.del /m %%a') do ( set eml_file= set eml_file=%%a for /f "skip=2 tokens=1-3 delims=[]=" %%a in ('find /i /n "Action" %%a') do ( set skipmore= set skipmore=%%a set action= set action=%%c set action=!action:~1,-1! ) echo. chcp 866>nul echo Сохраняю решение !action! из %group_name% !group_num! chcp 1251>nul set first_empty_line= set second_empty_line= set counter=0 for /f "tokens=1 delims=:" %%a in ('more +!skipmore! !eml_file! ^| findstr /r /v /n "."') do ( set /a counter+=1 if /i !counter! equ 1 set first_empty_line=%%a if /i !counter! equ 2 set second_empty_line=%%a ) set first_line= set second_line= set /a first_line=!skipmore!+!first_empty_line! set /a second_line=!second_empty_line!-6 del /q !action!.del 2>nul call :detach !first_line! !eml_file! !action!.del !second_line! base64.exe -d !action!.del !action! 2>nul del /q !action!.del 2>nul ) ) ) del /q !group_num!maillist.del 2>nul if exist "%CD%\Inbox\!mail_name!" popd ) ) goto :next_label :detach set count=0 for /f "tokens=*" %%a in ('more +%~1 %~2') do ( set /a count+=1 if /i !count! lss %~4 ( echo %%a>>%~3 ) else ( echo %%a | find /i "-----" >nul && goto :eof echo %%a>>%~3 ) ) goto :eof :next_label echo Next Label | В принципе код работает как надо, но дюже медленно; при этом проц нагружает на 100%. Основные тормоза возникают в виртуальном батнике :detach, когда аттач из eml-файла построчно переписывается в другой текстовый файл; а когда еще наступает проверка конца аттача echo %%a | find /i "-----" >nul && goto :eof вообще медленно идет из-за find Может, посоветуете идею по поводу ускорения? Может, совсем другой алгоритм следует применить? | Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 05:15 06-11-2007 | Исправлено: Tipulatoid, 05:37 06-11-2007 |
|