Sinclair83
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем, привет! Ранее (на 127 стр) выкладывал здесь утилиту для обрезки файлов. Человек оставил отзыв. По этой причине публикую немного изменённую версию. Основные отличия: возможность многократного запуска из bat-файла без открытия доп. окна (пакетная обработка), например: Код: @echo off echo. echo 12345 :: здесь ваш код :: след. файл имеет размер 1,5 Гб start "" /WAIT File_cutter.exe 500000000 700000000 64000000 c:\123.avi c:\123.aviP :: а этот поменьше start "" /WAIT File_cutter.exe 5 12 8 d:\wincmd.ini d:\wincmd.iniP /y :: здесь опять ваш код echo. echo abc pause | Лучше в батнике записать цикл, кот. будет перебирать и обрабатывать все или не все файлы в папке (например, только определённые расширения). Естественно также допускается указать только один файл в батнике. Таким образом, если программа запущена из bat-файла, то по окончании работы не ждёт закрытия окна консоли (nonSTOP). Оно закроется автоматически, если конечно у вас далее в батнике не встречается pause. Напротив, если же запустить из командн. строки TC, например (обработка одиночного файла), то информация с результатами работы будет "висеть", пока её не закроете принудительно. Так же из изменений: запуск без параметров = вывод минихэлпа. ExitCod'ов для дальнейшего анализа уже из bat'ника не писал. Типа такого: 0 - задание завершено успешно! 1 - завершено с ошибкой 2 - прервано пользователем и т.д. Буфер теперь имеет ограничения. Думаю, что предоставленного диапазона хватит с лихвой. Рекомендуется стартовать программу из батника с ключём /WAIT, чтобы иметь возможность последовательно обработать каждый файл. Ну и... чтобы не поиметь других проблем с запуском программы (высока вероятность). Дело в том, что если запускать программу непосредственно из консоли, то она не запустится. Кроме случая запуска без параметров. Но какой в этом интерес, верно? Ссылка P.S. Надеюсь теперь она больше подходит для темы по bat'никам. P.S.2 Да, имя бинарника можете изменить по своему усмотрению. Именно поэтому в хэлпе записал как bin-file.exe /////////////////////////////////////// Добавлено: Финальная версия. Основные изменения: Теперь возможно вместо конкретного значения буфера указать ключ /a. Таким образом его размер будет подобран автоматически так, чтобы всё задание выполнилось за одну итерацию цикла. Справедливо только для случаев, когда вычесленный размер <= 64 МБ. В противном случае размер буфера устанавливается равным 64 МБ, так как ограничение на макс. его размер сохранено. А вот мин. размер теперь равен 1 Байту (убрал это глупое и необоснованное ограничение в 8 Байт). Короче не нужно теперь считать вручную. Естественно предполагается, что у вас в системе свободно в несколько раз больше, чем 64МБ ОЗУ. Иначе размер буфера можно по-прежнему задать вручную. Из изменений отображаемой инф-ии: дополнительная индикация хода процесса (после процентов следует уже обработанный объём данных и 100% того, что должно получиться на выходе). Также буква (a) - auto или (m) - manual рядом с размером буфера. Теперь, если source file или target file не умещаются в одну строку (стандартные 80 символов консоли в ширину), то путь будет обрезан. Само собой разумеется что если пути содержат пробелы, то нужно их "окавычить". Также всё-таки добавил exitcode для случая break (возвратит 1). Во всех остальных случаях - 0. Это может быть полезно, когда запуск программы производится циклично и прервав обработку одного файла нужно досрочно выйти из цикла. Конечно же это справедливо только для случая, когда удаляемые части равны для всех обрабатываемых файлов (однотипная задача). Принята стандартная мера против повторного запуска. Ах да, добавил возможно избыточную проверку, чтобы ОС была непременно Windows. Ну вот примитивный пример батника с обработкой ERRORLEVEL: Код: @echo off set "ut=File_cutter_v1.1.exe" echo Your code here... echo. :: автомат. расчёт буфера. Кавычки вокруг путей не помешают. start "" /WAIT "%ut%" 700000000 500000000 /a "c:\123.avi" "c:\123.aviP" /y :: а здесь буфер задан вручную ::оставить только один 1-й Байт из файла-источника, минимально возможный :: размер которого равен 2-м Байтам. If %ERRORLEVEL% NEQ 1 start "" /WAIT "%ut%" 0 1 1 "d:\zzz.txt" "d:\zzz.txtP" /y echo and here... pause | Как и прежде настоятельно рекомендую использовать ключ /WAIT в батнике в связке со start'ом. Ссылка |