Теория по созданию архиватора через 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-файл, если необходимо
Пример кода:
Добавляем дату и время создания архива в название
-
В 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
Рефакторинг и оптимизация завершены
Было:
Стало:
pause
При необходимости можете настроить запуск данного файла по расписанию для этого переходите по ссылке
Спасибо за внимание!