Теория по созданию архиватора через BAT-файл

Код нашего скрипта будет состоять из 4-х частей:

  • <путь в программе>

    Путь к программе, в нашем случае 7-zip стандартный путь C:\Program Files\7-Zip

  • <команда>

    Действие, которое мы хотим от 7-zip

    Команда Описание
    a Добавить файлы в архив
    d Удалить файлы из архива
    e Извлечь файлы из архива
    u Обновить файл в архиве. Если файла нет, создастся новый
    x Извлечь файлы из архива. Пути сохранятся
  • <ключи>

    Условия (параметры) выполнения нашей команды

    Ключ Описание
    -t Тип архива. Например: -tzip, -tgz. Если не указывать тип будет .7z
    -ssw Включить файл в архив, даже если он сейчас открыт и используется
    -mx Уровень сжатия (компресии). 0 - без сжатия, 9 - максимальное сжатие. Пример: -mx5
    -p Задать пароль архиву. Например чтобы задать пароль qwer1234 ключ будет выглядеть так: -pqwer1234
    -o Задает директорию куда надо извель файлы
  • <пути к папкам и файлам>

    На первом месте идет путь к архиву, на втором путь к данным, которые нужно архивировать.
    Например: G:\archive\archive.7z D:\MyFolder 

Создание архиватора через BAT-файл

Задача: создать BAT-файл, который будет сжимать всё содержимое папки project на диске C:/ максимальным уровнем сжатия и помещать созданный архив в папку backup на том же диске.

Создаем BAT-файл

  • На диске C:/, создаем папку project. В эту папку поместите какие нибуть файлы, например, фото

  • В любом путом месте (например, рабочий стол) нажимаете правой кнопкой мыши и выбираем Создать->Текстовый документ.

  • Меняем расширение файла с .txt на .bat

    Если у вас не отображается расширение, на Windows 10 зайдите в "Этот компьютер", перейдите во вкладку Вид и поставте галочку "Расширения имен и файлов" Окно разрешения изменения расширений файлов

  • Кликаем правой кнопкой мыши на созданный файл и нажимаем Изменить. Откроется обычный блокнот, в нем нам и нужно написать скрипт.

    Пример кода:

    "C:\Program Files\7-Zip\7z.exe" a -mx9 C:\backup\archive.7z C:\project

    Расшифровка кода:

    "C:\Program Files\7-Zip\7z.exe" Наш путь в программе, через которую мы хотим архивировать
    a команда добавить в архив
    -mx9 ключ, который указываем что добавить в архив нужно с максимальным уровнем сжатия (об этом говорит цифра 9)
    C:\backup\archive.7z Первый элемент пути к папкам и файлам, указывает КУДА нужно поместить созданный архив
    C:\project Второй элемент пути к папкам и файлам, указывает ЧТО нужно архивировать
  • Готово! Сохраните внесенные изменения, закройте файл и запустите. Должен создаться архив в нашей папке backup

На этом можно было бы остановиться, но обязательно ли постоянно прописывать путь к программе 7zip? Что если не нужно архивировать не все файлы в папке? Как в название архива добавить дату, когда он был сделан?

Разберем каждый пункт по порядку.

Привязываем путь к программе 7zip к переменной

  • Нажимаем правой кнопкой мыши на Этот компьютер->Свойства в появившемся окне в списке слева выбираем Дополнительные параметры системы->Переменные среды.
  • В верхнем разделе Переменные среды пользователя для Ваш_user нажимаем Создать. В открывшемся окне указываем значения ниже, после жмем OK
    • Имя переменной - любое удобное имя, которое будет обозначать программу 7zip
    • Значение переменной - полный путь к программе с указанием exe файла
    Окно пользовательской переменной
  • В этом же разделе выбираем переменную path, нажимаем Изменить и добавляем путь к EXE C:\Program Files\7-Zip\, но его в пути не указываем! Окно добавления пути к программе
  • Готово! Теперь код будет выглядеть компактнее, в BAT-файле замените "C:\Program Files\7-Zip\7z.exe" на 7z

    Пример кода:

    7z a -mx9 C:\backup\archive.7z C:\project

Исключаем ненужные файлы из архивации

Для исключения файлов необходимо в конце скрипта добавить ключ -xr!, чтобы понять как он работает, просто изучите примеры.

Примеры:

-xr!file.png Исключаем файлы с именем и расширением file.png
-xr!*.png Исключаем файлы с расширением .png, неважно имя файла
-xr!file.* Исключаем файлы с именем file, неважно расширение файла
-xr!file Исключаем папки с именем file
-xr!file*.* Исключаем файлы, имя которых начинается на file%, например file01.txt в архив не попадет
-xr!*file*.* Исключаем файлы, имя которых содержит %file%, например 01file01.png в архив не попадет

Теперь на основе полученных данных модернизируйте BAT-файл, если необходимо

Пример кода:

7z a -mx9 G:\backup\archive.7z G:\project -xr!thumb.*

Добавляем дату и время создания архива в название

  • В Window есть две системные переменные, которые будем использовать

    DATE Возвращает текущую системную дату в формате: 01.01.2020
    Time Возвращает текущее системное время в формате: 15:29:55,03

    Чтобы добавить их в название файла архива, достаточно обозначить эти переменные знаком % с обоих сторон

    Добавьте эти переменные в название архива, отделите их нижним подчеркиванием, чтобы дата и время не сливались и в конце скрипта с добавьте новую команду pause, чтобы BAT-файл не закрывался сразу, как по примеру ниже

    Пример кода:

    7z a -mx9 C:\backup\archive_%DATE%_%Time%.7z C:\project -xr!thumb.*
    pause

    Сохраните и запустите!

  • После запуска должна возникнуть оишбка Синтаксическая ошибка в имени файла, имени папки или метке тома.

    Окно ошибки синтаксиса в командной строке

    Причина проста: формат переменной Time 12:23:38, а в Windows в названии файлов запрещено испольвать двоеточия ":"

    Для решения данной проблемы выведем только часы и минуты в название.

    Пример кода:

    7z a -mx9 C:\backup\archive_%DATE%_%Time:~0,2%_%Time:~3,2%.7z C:\project -xr!thumb.*
    pause

    Расшифровка кода:

    % Начало объединения текста и системной переменной (конкатенация)
    Time Системная переменная показывающее текущее системное время в формате: 15:29:55,03
    :~ Конструкция, указывающая что вывести нужно элементы времени
    0,2 Выводит часы т.к. часы начинают выводится с самого начала и состоит из двух цифр, указываем 0 - откуда надо начать выводить, 2 - сколько символов выводить
    3,2 Выводит минуты т.к. минуты начинают выводится после часов (3-я позици) и также состоит из двух цифр, указываем 3 - откуда надо начать выводить, 2 - сколько символов выводить
    % Завершение объединения текста и системной переменной

    Сохрание и запустите! Проблема решена, теперь названия архивных файлов будут выглядеть примерно так: archive_20.05.2020_13_33.7z

Рефакторинг и оптимизация завершены

Было:

"C:\Program Files\7-Zip\7z.exe" a -mx9 C:\backup\archive.7z C:\project

Стало:

7z a -mx9 C:\backup\archive_%DATE%_%Time:~0,2%_%Time:~3,2%.7z C:\project -xr!thumb.*
pause

При необходимости можете настроить запуск данного файла по расписанию для этого переходите по ссылке


Спасибо за внимание!