Скрипт для бэкапа файлов windows

Скрипт резервного копирования

Ценность резервного копирования ощущает каждый, кто сталкивался с потерей файлов.
Для резервного копирования можно использовать профессиональные платные продукты, например, Symantec Backup Exec Desktop and Laptop Option, а можно и самому бесплатно создать эффективный механизм резервного копирования файлов, как документов пользователя, так и служебных файлов на серверах, с помощью доступных подручных средств: командный файл и пара бесплатных программ.
Резервное копирование будет иметь следующие функции:

  • копирование всех файлов некоторого каталога и его подкаталогов (полное копирование, full backup), выполняется довольно долго при большом количестве файлов
  • копирование файлов, измененных после последнего резервного копирования (добавочное копирование, incremental backup) – определяется по архивному атрибуту, этот режим выполняется довольно быстро за счёт небольшого числа файлов

Реализация основана на следующих идеях:

  • файлы резервных копий сохраняются в в виде ZIP файлов, это удобно для просмотра пользователями, так как на любом компьютере есть программа ZIP Folder или архиватор, поддерживающий формат ZIP
  • каждая резервная копия сохраняется в отдельном файле, в названии файла указывается дата снятия копии, это облегчает поиск нужной редакции восстанавливаемого файла

Для создания ZIP файлов потребуется программа-архиватор с интерфейсом командной строки, например, 7-ZIP.

Предположим, что нам потребуется создавать резервные копии документов пользователя (%USERPROFILE%\Documents) и сохранять их на файловом сервере, где выделены папки для резервных копий каждого пользователя \\FILESERVER\Backup\%USERNAME%

Полное резервное копирование (FULLBACKUP.CMD)

Командный файл полного резервного копирования определяет имя файла по текущей дате, например, fullbackup_20130222.zip для 22 февраля 2013 года и вызывает архиватор:

Предполагается, что программа 7-ZIP уже установлена на компьютере, и путь к её файлам прописан в переменной PATH. Если нет, необходимо добавить в последнюю строку путь к файлу.

В результате, на файловом сервере будет создан файл fullbackup_20130222.zip с файлами пользователя. Пользователь может в любой момент открыть файл резервной копии на сервере и извлечь интересующий файл.

Добавочное резервное копирование (INCBACKUP.CMD)

Отличие добавочного копирования состоит в том, что необходимо добавлять в ZIP не все файлы, а только те, которые имеют установленный архивный аттрибут («файл готов для архивирования»). Для этого используем программу DIR с необходимыми параметрами, сохраняя вывод в файл:

Необходимо запускать команду из Unicode среды ( команда cmd /u incbackup.cmd ), чтобы корректно обработать файлы, в названии которых есть символы из расширенного набора.

Следующим шагом необходимо подготовить сформированный список файлов для 7-ZIP:

  • преобразовать кодировку из UTF-16 в UTF-8 (требуется для 7-ZIP),
  • убрать из путей файлов начальную часть пути к каталогу

Это можно сделать одним запуском программы nhreplace:

Остаётся добавить назначение переменных и удаление файла списка после записи файла резервной копии, итоговый командный файл для добавочного копирования будет выглядеть так:

Читайте также:  Windows any time update

Также в файле присутствуют команды pushd-popd для перехода в каталог копируемых файлов и обратно. Перемещение в этот каталог необходимо для нормальной работы 7-ZIP со списком. В зависимости от того, как запускается командный файл и нужно ли возвращаться в исходный каталог, можно оставить пару pushd-popd , или ограничиться командой cd «%files_folder%»

Поскольку 7-ZIP не имеет функции сброса атрибута файла, для этого можно использовать команду attrib.

Использование

Созданные командные файлы fullbackup.cmd и incbackup.cmd можно запускать как вручную, так и по расписанию.
Например, файл incbackup.cmd можно запускать и несколько раз в день, хоть каждый час, и он будет обновлять файл резервной копии текущего дня по мере того, как пользователь вносит изменения в свои документы, при этом время резервного копирования будет небольшим.
При этом пользователю будут доступны сделанные копии по дням, и он сможет сам, без участия администратора, восстанавливать не только определённый файл, но и различные его редакции (по датам).

Этот скрипт подходит для конфигурации, когда компьютер имеет высокоскоростное подключение к серверу , так как скрипт обрабатывает ZIP файл резервной копии, находящийся на файловом сервере.

VBS скрипт для резервного архивирования

Доброго вечера.
Озадачился тут резервным копированием данных у клиента, ну и конечно очистка хранилища от старых бэкапов. Тема в принципе замылиная, но сторонний софт я не люблю для этого использовать, а 7zip как то на сервере не прижился. Вот и утопал в поисках прекрасного скрипта для данного мероприятия. Покопавшись в сети нашёл интересную статейку, но в том скрипте не хватало части функционала, а многие найденные были слишком громозкими, а во многих почему то были допущены детские ошибки(подозреваю что нарочно, правда не понятно зачем).
Собственно тело vbs скрипта, универсилизировал как смог:

Соответственно можно задавать параметры в теле скрипта непременным, либо аргументами при запуске вида:
cscript zip.vbs C:\Путь-какую-папку-архивировать\ С:\Путь-куда-архивировать\ Название-файла.zip Срокжизнифайлов
И конечно не забываем про пробелы.

Не забываем раскоментировать нужный блок и закоментировать не нужный.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.

Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.

Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.

Не надо пропускать:

  • рекламные и PR-публикации
  • вопросы и просьбы (для них есть Хабр Q&A);
  • вакансии (используйте Хабр Карьеру)
  • статьи, ранее опубликованные на других сайтах;
  • статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
  • жалобы на компании и предоставляемые услуги;
  • низкокачественные переводы;
  • куски программного кода без пояснений;
  • односложные статьи;
  • статьи, слабо относящиеся к или не относящиеся к ней вовсе.
Читайте также:  Как расширить возможности windows

BAT скрипт для резервного копирования папки

Набросал ещё один маленький BAT скрипт для резервного копирование папки. Внесите свои данные и через scheduler настройте расписание резервного копирования.

Ссылки

Функции

  • С помощью xcopy делает резервные копии папки.
  • Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
  • С помощью 7-Zip архивирует резервные копии.
  • Удаляет старые резервные копии.
  • DirName — название папки
  • SourceDir — что бэкапим
  • BackupDir — куда бэкапим
  • NumFolders — сколько подпапок с бэкапами хранить
  • a7z — путь к 7z.exe

Пример настройки расписания

В Task Scheduler настраиваем новое задание.

Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.

В триггерах настраиваем расписание. У меня резервное копирование происходит раз в сутки.

Указываем ссылку на наш BAT файл.

Проверяем настройки. OK.

Теперь папка будет резервироваться раз в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 10 дней.

Если хотите хранить ежедневные и ежемесячные резервные копии — сделайте два BAT файла и два расписания резервного копирования в разные папки.

Скрипт «Утилита резервного копирования»

Создать bat с 2-мя параметрами. Первый — адрес каталога, второй — адрес создания резервной копии. Всё должно быть заархивировано. Название файла должно содержать дату архивации (до секунды). Назвать скрипт «Утилита резервного копирования».

BAT резервного копирования
Есть BATник который папку добавляет в архив с текущей датой, как можно его дополнить что бы.

Дописать батник резервного копирования
Есть батник, который копирует все файлы из одной папки в другую Set SRC=E:\1 Set DST=E:\2 .

BAT-файл для резервного копирования
Накидал бат для создания копии set h=%TIME:

Пакетный файл для резервного копирования файлов
Создайте новый пакетный файл Пакетный файл, предназначенный для резервного.

Это зависит от цели архивации, типов файлов которые туда будут попадать (по их исходной степени сжатия).
Может быть грамотнее делать избирательное сжатие, исключая некоторые расширений. И делать архив в 2 этапа.
Можно вообще не сжимать, чтобы получить макс. скорость. Можно шифровать.

Строка №4, 5 — я бы слеши убрал, а вот в команде архивации обрамил бы переменные еще и в кавычки.
Дату/время можно получить так:

Суть задания для себя вывел такую:
Нужно создать папку backup в которую помещаю папку выбранную пользователем (через параметр -такового еще нет=) ), которая имеет имя <дата и время до секунд ..>.
Далее помещаю папку в архив, который тоже имеет такое же имя <дата--время>.
Удаляю папку ранее перемещенную в папку backup
—как результат получили архив с именем <дата-время>в котором папка с данным имеющая имя <дата-время>.
Так же реализую перемещение (старого backup) при создании нового в папку old_backup

Читайте также:  Sharing files with windows and linux

Короче сочинял-сочинял и в итоге получилось это
>

—————————————————————————————————————-
Помогите с исправлением ошибок и доведения кода до адекватного (оптимизация такового).
Основная проблема которая меня беспокоит— как перемещать не только файлы но и подкатологи выбранной нами папки (xcopy /s /e /F /H /R /K /Y /I «C:\WORK\OS\TEST\*.*» «%dr%» не хочет работать).
И еще как синхронизировать время более удачным способом (а то возникает проблема задержек и он образует лишние папки или ошибки в доступе)
и если кому не сложно . -. как сделать логирование в текстовый файл всего бэкапа (с датой и временем, и путем и название файла . как то так)
p.s. сори за не адекватное выражение мысли, просто сам уже путаться начинаю ))

Добавлено через 26 секунд

Добавлено через 1 час 37 минут
как для данного примера сделать что бы папки были не статичны а создавались по ходу выполнения backup’a и
названия были в виде дата время
.

Добавлено через 36 минут
Короче вроде как сделал последний вариант )))

BAT скрипт для резервного копирования папки

Набросал ещё один маленький BAT скрипт для резервного копирование папки. Внесите свои данные и через scheduler настройте расписание резервного копирования.

Ссылки

Функции

  • С помощью xcopy делает резервные копии папки.
  • Каждый бэкап сохраняется в отдельную подпапку вида DD.MM.YYYY_hhmmmss.
  • С помощью 7-Zip архивирует резервные копии.
  • Удаляет старые резервные копии.

@echo off
SetLocal EnableDelayedExpansion

set DirName=my_folder
set SourceDir=C:\%DirName%
set BackupDir=B:\%DirName%\daily\
set NumFolders=10

0,2%
set h=%h: =0%
set FullBackupDir=%BackupDir%%date%_%h%%time:

xcopy %SourceDir% %FullBackupDir%%DirName%\ /E /F /H /R /K /Y /D 2>nul >nul

«%a7z%» a -tzip -bb0 -bd -sdel «%FullBackupDir%%DirName%.zip» «%FullBackupDir%» 2>nul >nul

for /f «tokens=* delims=» %%D in (‘dir %BackupDir% /ad /b /o-d’) do (
if not %%D==»» (
if not !NumFolders!==0 (
set /a NumFolders-=1
) else (
rd /s /q %BackupDir%%%D 2>nul >nul
)
)
)

  • DirName — название папки
  • SourceDir — что бэкапим
  • BackupDir — куда бэкапим
  • NumFolders — сколько подпапок с бэкапами хранить
  • a7z — путь к 7z.exe

Пример настройки расписания

В Task Scheduler настраиваем новое задание.

Выбираем пользователя, от имени которого будет выполняться резервное копирование. После сохранения задания нас спросят пароль от него. Ставим галку Run whether user is logged or not — запускать даже если юзер не залогинен.

В триггерах настраиваем расписание. У меня резервное копирование происходит раз в сутки.

Указываем ссылку на наш BAT файл.

Проверяем настройки. OK.

Теперь папка будет резервироваться раз в день. С настройкой NumFolders=10 в BAT файле мы будем хранить данные за последние 10 дней.

Если хотите хранить ежедневные и ежемесячные резервные копии — сделайте два BAT файла и два расписания резервного копирования в разные папки.

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.

Оцените статью