Оценить пост

7-Zip — бесплатный качественный архиватор поддерживающий следующие форматы файлов:
7z, BZIP2, GZIP, TAR, ZIP/ZIP64, XZ (упаковка и распаковка), RAR, CAB, ISO, ARJ, LZH, CHM, MSI, WIM, Z, CPIO, RPM, DEB, NSIS, LZMA, NTFS, FAT, VHD, MBR, SWM, MSLZ (только распаковка), FLV, SWF (распаковка, частично) 
Полный список поддерживаемых форматов для версии 9.06:
Arj, bzip2, Cpio, Deb, Dmg, ELF, FAT, FLV, gzip, Lzh, lzma, lzma86, MachO, MBR, MsLZ, Mub, NTFS, PE, Rpm, Split, SWFc, SWF, VHD, Xar, xz, Z, 7z, Cab, Chm, Compound, HFS, Iso, Nsis, Rar, tar, Udf, Wim, zip (хранится в 7z.dll)

Отличительные особенности:

  • степень сжатия архивов ZIP и GZIP, создаваемых с помощью 7-Zip, на 2-10% выше, чем у PKZip и WinZip;
  • высокая степень сжатия в собственном формате 7z;
  • создание самораспаковывающихся архивов (для формата 7z);
  • шифрование по алгоритму AES-256 (для формата 7z);
  • интеграция в оболочку Windows;
  • наличие плагина для FAR Manager;
  • наличие версий GUI и для командной строки.Системные требования: Windows 98/ME/NT/2000/XP/Vista/7/8 (имеется портированные версии для Linux/Unix).
    Языки интерфейса: русский, английский и др. (более 70).

Для выполнения поставленной задачи естественно использовалась консольная версия архиватора. После непродолжительного курения мануалов комманда приняла следующий вид:
7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir

Поподробней об использованных ключах:

-tzip формат архива установлен в zip, без этого ключа умолчальный формат 7z;
-ssw принудительная упаковка файлов, которые в данный момент открыты для записи (мало ли кто-то засиделся на работе и что-то там правит);
-mx7 высокая степень сжатия (7), можно поставить и 5 (нормальное сжатие), тогда процесс пойдет побыстрее;
-r0 (это ноль, а не буква О) исключения, которые будут прописаны дальше обрабатываются только в рабочем каталоге;
-x@exclusions.txt это собственно говоря файл со списком исключений, которые не будем архивировать. Каждая строка файла — новое исключение. Можно использовать маски типа *.ext и т.п. Если исключение не много, то можно обойтись и без файла, в таком случае ключ примет следующий вид: -x!*.ext;
full_path_for_the_archive это соответственно путь и имя нового архива;
working_dir это папка, которая подлежит упаковке.

Для пущего удобства можно использовать в имени архива %date%.

В связи с тем, что архивировать нужно разные папки в разные архивы, объемами 10-15 гигов, то резонно использовать последовательность команд, дабы не создавать кучу правил в планировщике и не думать сколько времени займет весь этот процесс. Соответственно для этих целей использую объединение команд с помощью &&. Если использовать &, то все команды будут выполняться одновременно, что меня никак не устраивает, с && — последовательно при удачном завершении предыдущей команды.

Помимо всего прочего желательно иметь логи, чтоб быть в курсе, а не случилось ли чего. Это можно легко реализовать с помощью инструкции ‘>>’, которая сохраняет вывод в консоль в текстовый файл. Однако проблема в том, что 7zip вываливает в консоль кучу информации, в том числе и об архивации каждого нового файла. Очевидно, что на объемах в несколько тысяч файлов вся эта инфа в логах нужна как мертвому припарок. Соответственно требуется исключить все ненужные строки, оставив те, где есть информация о названии создаваемого архива, результат архивации и информацию об ошибках, коли таковые появятся.

Тут на помощь приходит команда FINDSTR. В моем случае она принимает следующий вид:

findstr /P /I /V «Compressing 7-Zip»

Сначала пара слов об использованных ключах:

/P пропускает строки, содержащие непечатные символы;

/I на всякий случай игнорирую регистр букв;

/V » « непосредственно перечень слов для поиска в строках и последующего исключения этих строк.

В итоге на выходе этой команды имеем 3 строки:

Scanning

Creating archive archive_name

Everything is Ok

А потом закатываю все в текстовый файл, для последующего изучения:

findstr /P /I /V «Compressing 7-Zip» >> log_file 

Теперь дело за малым. Нужно зафутболить все три блока в одну последовательность команд:

7za.exe a -tzip -ssw -mx7 -r0 -x@exclusions.txt full_path_for_the_archive working_dir | findstr /P /I /V «Compressing 7-Zip» >> log_file.%date%.txt

материал взят здесь.