7-zip
В нём нет возможности хранить версионность файлов в одном архиве. Однако, можно сделать несколько diff-архивов и тогда каждый из них будет хранить свою версию файлов. Другими словами, каждый Чаптер (chapter, терминология ARJ) располагается в отдельном файле. Точнее, будет один базовый архив и множество diff-архивов с изменениями относительно базового.
Анти-файл
Даже пригодился "анти-файл" (Анти-пункт, по терминологии 7-zip). Когда пользователь удалил файл, но в базовом архиве этот файл есть, то в diff-архиве создаётся "анти-файл". Грубо говоря, после распаковки базового архива файл создаётся на диске - ведщь в базовом архиве этот файл присутствует. А вот при распаковке diff-архива, анти-файл удаляет файл на диске.
Пишем батник
Батник решил написать мой коллега, nWhite.
Текст батника ниже. Краткий перечень интересных моментов:
- "Самозапускаемый" батник для сворачивания в трей. Можно конечно написать еще один батник который будет запускай этот большой и обойтись без такого изврата, но это будет уже два батника:
REM При первом вызове батника он перезапускает себя,
REM чтобы запуститься свернутым и с низким приоритетом:
IF Not %1.==SecondStart. (
Start /Min /Low %~f0% SecondStart
Exit
)
- Заголовок батника
ChCP 1251>Nul
Title "Архивация данных пользователя"
- Создаём базовый архив
%ArchiverEXEPath% A %BaseArcPath% -ssw %ExcludeExt% %BackupFolder%\* -ms=off -mx=1 -mtc=on
- Создаём diff-архив на основе базового архива
%ArchiverEXEPath% U %BaseArcPath% -ssw %ExcludeExt% -u- -up0q3r2x2z0!%DiffArcPath% %BackupFolder%\* -ms=off -mx=1 -mtc=on