Найти в Дзене

Топорное резервное копирование с помощью WinRAR и CMD

Несколько лет назад узнала, что с WinRar можно работать через консоль. Сразу же было решено написать простенький bat-ник для организации резервного копирования важных файлов. О том, как добавить пакетный файл в планировщик заданий, можете почитать тут :) Синтаксис команд консольного WinRar: <Путь до WinRAR> <команда> <ключ 1> ... <ключ N> <имя архива> <файлы…> или <@файл-список…> <путь для извлечения\> Полный список команд и ключей можно позырить тут. Рассмотрим необходимые для архивации: Команды:
A Добавить файлы в архив
U Обновить файлы в архиве Ключи:
-r Обрабатывать вложенные папки
-m<n>Установить метод сжатия (n = 0 .. 5, стандартный метод сжатия - 2)
-dh Открывать совместно используемые файлы
-ag[формат] Добавить к имени архива текущую дату и время
-x<имя> или -x<@файл-список> Исключить из обработки файлы (можно указать только определенный формат, например, с ключом -x*.exe в архив не будут добавляться .exe файлы)
-hp[пароль] Зашифровать архив паролем
-ow Обработать информацию о

Несколько лет назад узнала, что с WinRar можно работать через консоль. Сразу же было решено написать простенький bat-ник для организации резервного копирования важных файлов.

О том, как добавить пакетный файл в планировщик заданий, можете почитать тут :)

Синтаксис команд консольного WinRar:

<Путь до WinRAR> <команда> <ключ 1> ... <ключ N> <имя архива> <файлы…> или <@файл-список…> <путь для извлечения\>

Полный список команд и ключей можно позырить тут. Рассмотрим необходимые для архивации:

Команды:
A
Добавить файлы в архив
U Обновить файлы в архиве

Ключи:
-r Обрабатывать вложенные папки
-m<n>Установить метод сжатия (n = 0 .. 5, стандартный метод сжатия - 2)
-dh Открывать совместно используемые файлы
-ag[формат] Добавить к имени архива текущую дату и время
-x<имя> или -x<@файл-список> Исключить из обработки файлы (можно указать только определенный формат, например, с ключом -x*.exe в архив не будут добавляться .exe файлы)
-hp[пароль] Зашифровать архив паролем
-ow Обработать информацию о правах доступа к файлам

Пример: Нужно заархивировать файл "Новый проект.gif" в папку test на диске D:

"C:\Program Files\WinRAR\rar.exe" a -r -m2 -dh -ow "D:\test\test.rar" "D:\Новый проект.gif"
"C:\Program Files\WinRAR\rar.exe" a -r -m2 -dh -ow "D:\test\test.rar" "D:\Новый проект.gif"

Результат выполнения:

-2

Итак, мой батник для ручного создания архива

rem Наводим красоту
TITLE BACKUP MASTER
COLOR 0A
CLS
@ECHO off

rem Сохраняем и задаем пути в переменные
SET current_path=%cd%
SET backup_path=%current_path%Backup\
SET backup_list=@%current_path%backup_list.txt
SET rar_path="C:\Program Files\WinRAR\rar.exe"

rem Создаем папку для бэкапов и txt для списка файлов
MKDIR Backup
IF NOT EXIST backup_list.txt (type NUL>backup_list.txt)

rem Предлагаем открыть список архивируемых файлов
:start
CHOICE /T 120 /C yne /CS /D n /M "Open backup_list? yes (y), no (n) or exit (e)"
IF %ERRORLEVEL%==1 (GOTO edit_list)
IF %ERRORLEVEL%==2 (GOTO make_backup)
IF %ERRORLEVEL%==3 (GOTO exit)

rem Редактируем список файлов
:edit_list
START %current_path%backup_list.txt

rem Делаем бэкап
:make_backup

rem Выводим список бэкапов в папке Backup
TREE %current_path%Backup /f

rem Предлагаем ввести имя файла или сгенерировать по дате
CHOICE /T 9999 /C nde /CS /D d /M "To enter file name (n). To name in format backup_file_DD.MM.YYYY (d). For exit (e)"
IF %ERRORLEVEL%==1 (SET /p archive_name="Enter name: ")
IF %ERRORLEVEL%==2 (SET archive_name=backup_file -ag_DD.MM.YYYY)
IF %ERRORLEVEL%==3 (GOTO exit)

rem Предлагем создать новый файл и обновить существующий
CHOICE /T 9999 /C une /CS /D n /M "Update existing (u) or make new (n)? For exit (e)"
IF %ERRORLEVEL%==1 (GOTO update)
IF %ERRORLEVEL%==2 (GOTO make_new)
IF %ERRORLEVEL%==3 (GOTO exit)

rem В случае обновления архива
:update
ECHO Updating...
%rar_path% u -r -m2 -dh -ow %backup_path%%archive_name% %backup_list%
GOTO continue_or_exit

rem В случае создания нового архива
:make_new
ECHO Making new...
%rar_path% a -r -m2 -dh -ow %backup_path%%archive_name% %backup_list%

rem Продолжаем создавать архивы или выходим
:continue_or_exit
CHOICE /T 9999 /C ce /CS /D c /M "Continue (c) or exit (e)?"
IF %ERRORLEVEL%==1 (GOTO start)

:exit
PAUSE

Пример использования

Сама архивация шла долго, так что для краткости гифки была пропущена
Сама архивация шла долго, так что для краткости гифки была пропущена

Вот такой простенький скрипт... Надеюсь, кому-то может пригодиться :)

Другие статьи цикла о командной строке Windows