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:

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

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

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

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

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

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

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 файла и два расписания резервного копирования в разные папки.

Резервное копирование средствами Windows

Столкнулся недавно с такой дилеммой. Работу работаю на нетбуке, а дома использую стационарный компьютер, так вот, что бы не включать ноутбук ради пары файлов, решил устроить такое себе резервное копирование папки с рабочими доками. можно было бы поставить какой то софт для копирования, но для столь простой задачи тратить ресурсы маленького нетбука, считаю расточительством. Не долго думая, было принято решение использовать возможности Windows. А именно: «Планировщик заданий» и команду «xcopy«. Можно использовать утилиту copy но на мой взгляд, она функционально устарела. Говорю сразу, если ваши задачи сложнее чем просто копирование определенных файлов в другую директорию, то вам потребуются более сложные скрипты или готовые программы по резервному копированию. Все представленное ниже, соответствует Windows 7. На Windows XP могут отличатся параметры и расположения файлов и программ.

Шаг 1. Пишем исполняемый скрипт.

Начнем пожалуй с синтаксиса команды xcopy:

xcopy источник [ результат ] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [] [/n] [/o] [/x] [/exclude:файл1[+[файл2]][+[файл3]] [] [/z]

источник Обязательный параметр. Задает местонахождение и имена файлов для копирования. Параметр должен задавать или диск, или путь.
результат Задает место, куда будут скопированы файлы. Параметр может включать имя диска с двоеточием, имя каталога, имя файла или их комбинацию. /w Выводит предложение тыцнуть любую кнопку для выполнения.

Не буду выписывать все ключи, опишу только самые важные на мой взгляд:

/c — Игнорирует ошибки.
/h — Копирует скрытые и системные файлы.
/e — Копирует все подкаталоги, включая пустые.
/r — Копирует файлы с атрибутом «только для чтения»
/y — Убирает запрос на подтверждение перезаписи существующего конечного файла.
/v — Проверка каждого скопированного файла на соответствие с исходным файлом.
/exclude:файл1[+[файл2]][+[файл3]] — Определяет список файлов и каталогов, которые необходимо исключить из копирования.
/q — Отменяет вывод на экран сообщений команды xcopy.
/? — Справка по синтаксису и ключам утилиты xcopy

Прочие полезности командной строки, подходящие для нашей задачи:

:: — Самый простой комментарий
pause — остановка выполнения скрипта, следует использовать для отладки, что бы успеть прочитать вывод команды.
@ — Этот символ отключит вывод команды на экран, при этом вывод результата выполнения команды останется. Следует поместить перед командой.
@echo off — Эта команда отключит вывод команд на экран на протяжении выполнения всего пакетного файла, при этом вывод результата выполнения останется. Ее следует разместить в начале файла.

И так создаем наш скрипт. Открываем текстовый редактор и пишем все команды согласно нашим потребностям. Пример ниже. После наполнения нужно сохранить файл с расширением .cmd или .bat

:: Копирование на флешку
@ xcopy D:\Folder H:\Folder_copy /c/h/e/r/y/v/q
:: Копирование в облачное хранилище
@ xcopy D:\Folder D:\YandexDisk\Folder /c/h/e/r/y/v/q /exclude:e.txt
pause

При таком оформлении на экран будет выведено минимально текста.

Если файлов у вас не много то можно убрать /q, тогда в колонку будут перечислены все скопированные файлы.

Сама суть двойного копирования в следующем:

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

Вторая строчка сохраняет на Яндекс.Диск, таким образом файлы можно просматривать даже на смартфоне. Для синхронизации можно использовать любой подобный сервис (DropBox, BoxNet, Skydrive, Google Drive…).

Есть допустим файлы или папки которые вам не надо копировать в целях конфиденциальности или еще каких других. Создаем текстовый файлик, например, как у меня — e.txt. В содержимом пишем согласно следующего формата:

\Folder\ — исключить папку
file.doc — исключить файл
.avi — исключить все файлы данного типа

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

После завершения тестирования можно убрать pause и после выполнения окно само закроется.

Шаг 2. Добавляем задание в планировщик.

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

Откроем Планировщик заданий В Win 7 он расположен ПУСК — Все программы — Стандартные — Служебные — Планировщик заданий. Или через Выполнить (на клавиатуре +R): %windir%\system32\taskschd.msc /s

Нежно нажимаем Создать простую задачу и пошагово настраиваем нашу задачу. После определения периодичности и времени запуска скрипта, в разделе Действие, нужно начать на «запустить программу«. Следующий этап — указать путь к нашему ярлыку. Это все. Теперь в указанное вами время будет запускаться наш скрипт и выполнять тихое копирование файликов.

#Автоматизация #Технологии #Процессы #ИТ #Записки #Журнал #Блог #Форум

Форум для различных тем в большей части ИТ

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

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

Сообщение Артём Мамзиков » Пт сен 27, 2019 14:34 #1

Все скрипты запускаются через планировщик заданий

Файл БД выгружается SQL Агентом в 20ч
Далее запускается скрипт в 3Ч упаковку в архив созданием имени текущего дня и перемещается на другой сервер
Другой скрипт удаляет старые копии

6,4%
set DMY=%Y%.%M%.%D%
::Подключение сетевого диска
net use Z: \\192.168.101.7\backups /user:логин пароль
:: Сжатие файла и перемещение по сети на другой сервер
«C:\Program Files (x86)\7-Zip\7zG.exe» a -tzip -mx7 Z:\BD_%DMY%.zip L:\basebackup\for_fs
:: Отключение сетевого диска
net use Z: /delete

6,4%
set DMY=%Y%.%M%.%D%
net use Z: \\192.168.101.7\backups /user:Логин Пароль
copy D:\basebackup\for_fs\*.* Z:\
ren Z:\sitex_bd_r01.bak BD_%DMY%.BAK
net use Z: /delet

‘Создание объектов
Set FSO3 = WScript.CreateObject(«Scripting.FileSystemObject»)
Set objNetwork = WScript.CreateObject(«WScript.Network»)

‘Присваиваем значения переменным
strDriveName = «Z:»
strRemoteShare = «\\192.168.101.7\backups»
strUser = «Пользователь»
strPassw = «Пароль»

if FSO3.DriveExists(strDriveName) Then

‘Выводим информацию на экран
‘WScript.Echo «Диск » & strDriveName & » уже подключен»

‘Подключаем диск Z:
WScript.Sleep 1000
objNetwork.MapNetworkDrive strDriveName, strRemoteShare, false, strUser, strPassw
WScript.Sleep 1000

sFolderPath = «Z:\»
maxCount = 7
Set oFSO = CreateObject(«Scripting.FileSystemObject»)
Set oFolder = oFSO.GetFolder(sFolderPath)
Set colFiles = oFolder.Files
If colFiles.Count>maxCount Then
‘ сформировали массив
Dim aFile()
ReDim aFile(colFiles.Count-1, 1)
Counter = 0
For Each oFiles in colFiles
aFile(Counter,0) = oFiles.Name
aFile(Counter,1) = oFiles.DateCreated
Counter = Counter +1
Next
Counter = Counter -1
‘ посортировали массив
For i = 0 To Counter
For j = i+1 To Counter
If aFile(i,1) VTmp = aFile(i,0)
aFile(i,0) = aFile(j,0)
aFile(j,0) = VTmp
VTmp = aFile(i,1)
aFile(i,1) = aFile(j,1)
aFile(j,1) = VTmp
End If
Next
Next
‘ удалили файлы
For i = maxCount To Counter
oFSO.DeleteFile(sFolderPath & aFile(i,0))
Next
End If

1. Скрипт будет лежать на одном сервере (у сервера есть доступ ко всем проверяемым узлам) и будет работать по Траппер элементы данных (как активный агент но данные будет передавать скрипт) рядом со скриптом должен быть zabbix_sender.exe но лучше прописать переменную так как при запуске из планировщика может не отработать (например Path прописать ;C:\zabbix;)

в 8:30 запуск скрипта check_bk_fs.bat
Цикл перебора IP районов
\192.168.1ХХ.3\for_fs\*.bak
Каждый день в 20:20 выгрузка файла из SQl
Проверяем на следующий день дата изменения файла = минус один день от текущей даты если равно значит 1 нет 0

\\192.168.%1.7\backups\BD_%y%.%m%.%d%.*
Копия файла в архив каждый день сравниваем имя архива с текущей датой если = то проверяем дату изменения архива если текущая дата= то 1 если нет то 0
Получаем размер файла Проверяем что архив не битый высчитываем разность за сутки
Старый делим на новый должно быть не меньше 1.1
Значение должно быть в районе 1
Так же получаем содержимое папки имя файла дата изменения размер в виде лога
Проверка файла выгруженного из SQL далее его упаковка в архив и копирование на другой сервер проверка

@echo off
color 1a

:: Удаление старых логов более 31 день
forfiles /p «%

dp0log» /S /D -31 /C «cmd /c del /f /a /q @file»

SETLOCAL
:: Перебор IP подсетей с 1 по 28
for /L %%a in (101,1,128) do call:backup %%a
.
goto:eof

:backup
:: Проверка Копии за вчерашний день копия делается вечером скрипт запускается утром
set «sourcePath=\\172.16.%1.6\for_fs\*.bak»
:: Переменная если файл не найден ошибка
set good=0

:: Скрипт минус 1 день
setlocal enabledelayedexpansion
::День
set d=%date:

:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:

1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:

:: Определение кл-ва дней в феврале высокосный год или нет от 0 до 3
:: %Деление по модулю является остаток от целочисленного деления
set /a feb=y%%4
:: Если високосный будет 0=0 значит 29 если не равно значит 28 дней
if %feb%==0 (set feb=29) else (set feb=28)

Читайте также:  Windows 10 repairing tool

::високосным является не год, который делится без остатка на 4, а тот, который делится на 4, кроме тех, которые делятся на 100, но не делятся на 400
::set /a feb1=y%% 100
::set /a feb2=y%% 400

::set IsLeapYear=No
::if !feb2!==0 (set IsLeapYear=Yes) else (
::if !feb2!==0 (
::if not !feb1!==0 (set IsLeapYear=Yes)
::)
::)

:: Минус 1 месяц
set /a tok=m-1
::Проверка января если месяц 1 -1=0 значит месяц 12
if %tok%==0 set tok=12
::Цифра месяца соответствует порядковому номеру в скобках
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
:: минус 1 день set /a d-=1
set /a d-=1
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)
set d=0%d%
set m=0%m%
::Так как даты сравнивает до точки, делаем дату единым числом ггггммдд
set yesterdas=%y%%m:

-2%
::Конец скрипта минус 1 день
setlocal DISABLEDELAYEDEXPANSION
::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.%1.3\for_fs\*.bak’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k bklogforfs%1 -o «%%p»)
:: Запрос размера файла
for %%w in (\\192.168.%1.3\for_fs\*.bak) do set sizeforfs=%%

zw
:: Переменные
:: Искать в заданном расположении
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.-/ » %%j in («%%

ti») do (
::Дата изменения файла больше или равно минус текущий день
if %%l%%k%%j GEQ %yesterdas% (
:: Если файл найден то good=1
set good=1
)
)
)
:: Сюда попадает ответ переменной good 0 или 1 для сравнения
if %good% == 1 (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_backup%1.6 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k bksizeforfs%1 -o %sizeforfs%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_backup%1.6 -o 0)

:: Проверка копии в архиве на Файловом за сегодняшний день
::День
set d=%date:

6,4%
:: Переменная пути на файл
set «sourcePath=\\192.168.%1.9\es-backups\ES_%y%.%m%.%d%.*»
:: Переменная если файл не найден ошибка
set good=0

::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.%1.9\es-backups\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k logbkfses%1 -o «%%p»)
:: Запрос размера файла
for %%w in (\\192.168.%1.9\es-backups\ES_%y%.%m%.%d%.*) do set sizees=%%

zw
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
::Изменение файла = Текущая дата дд.мм.гггг
if %%j.%%k.%%l == %date% (
:: Если файл найден то good=1
set good=1
)
)
)
:: Сюда попадает ответ переменной good 0 или 1 для сравнения
if %good% == 1 (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_arxbackups%1.9 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k bksizefses%1 -o %sizees%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_arxbackups%1.9 -o 0)

:: Создание Лога
::IF %1==128 call:log
::goto:pusto

@echo off
color 1a

SETLOCAL
:: Перебор IP подсетей с 1 по 28
for /L %%a in (101,1,128) do call:backup %%a
.
goto:eof

:backup
:: Проверка Копии за вчерашний день копия делается вечером скрипт запускается утром
set «sourcePath=\\192.168.%1.3\for_fs\*.bak»
:: Переменная если файл не найден ошибка
set good=0

:: Скрипт минус 1 день
setlocal enabledelayedexpansion
::День
set d=%date:

:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:

1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:

:: Определение кл-ва дней в феврале высокосный год или нет от 0 до 3
:: %Деление по модулю является остаток от целочисленного деления
set /a feb=y%%4
:: Если високосный будет 0=0 значит 29 если не равно значит 28 дней
if %feb%==0 (set feb=29) else (set feb=28)

::високосным является не год, который делится без остатка на 4, а тот, который делится на 4, кроме тех, которые делятся на 100, но не делятся на 400
::set /a feb1=y%% 100
::set /a feb2=y%% 400

::set IsLeapYear=No
::if !feb2!==0 (set IsLeapYear=Yes) else (
::if !feb2!==0 (
::if not !feb1!==0 (set IsLeapYear=Yes)
::)
::)

:: Минус 1 месяц
set /a tok=m-1
::Проверка января если месяц 1 -1=0 значит месяц 12
if %tok%==0 set tok=12
::Цифра месяца соответствует порядковому номеру в скобках
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
:: минус 1 день set /a d-=1
set /a d-=1
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)
set d=0%d%
set m=0%m%
set yesterday=%d:

-2%.%y%
::Конец скрипта минус 1 день
setlocal DISABLEDELAYEDEXPANSION
::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.%1.3\for_fs\*.bak’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k bklogforfs%1 -o «%%p»)
:: Запрос размера файла
for %%w in (\\192.168.%1.3\for_fs\*.bak) do set sizeforfs=%%

zw
:: Переменные
:: Искать в заданном расположении
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.-/ » %%j in («%%

ti») do (
if %%j.%%k.%%l == %yesterday% (
:: Если файл найден то good=1
set good=1
)
)
)
:: Сюда попадает ответ переменной good 0 или 1 для сравнения
if %good% == 1 (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_backup%1.3 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k bksizeforfs%1 -o %sizeforfs%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_backup%1.3 -o 0)

:: Проверка копии в архиве на Файловом за сегодняшний день
::День
set d=%date:

6,4%
:: Переменная пути на файл
set «sourcePath=\\192.168.%1.7\backups\BD_%y%.%m%.%d%.*»
:: Переменная если файл не найден ошибка
set good=0
::Текущая дата дд.мм.гггг
set needDate=%date%

::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.%1.7\backups\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k logbkfsbd%1 -o «%%p»)
:: Запрос размера файла
for %%w in (\\192.168.%1.7\backups\BD_%y%.%m%.%d%.*) do set sizebd=%%

zw
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
if %%j.%%k.%%l == %needDate% (
:: Если файл найден то good=1
set good=1
)
)
)
:: Сюда попадает ответ переменной good 0 или 1 для сравнения
if %good% == 1 (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_arxbackups%1.7 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k bksizefsbd%1 -o %sizebd%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_arxbackups%1.7 -o 0)

Группа элементов trapbacku
Элемент Создаем для каждой подсети
имя SR01 not_backup
Тип Zabbix траппер
Ключ not_backup101.3
Тип информации Числовой
История 90d

Файл выгруженный из базы SQL для упаковки в архив копии на ФС
За вечер предыдущего дня
1 -файл есть
0 — файла нет

\\SRXX\for_fs
Not 1XX.3 sitex_bd_rXX.bak

Триггер
Имя SR01 sitex backup
Важность выбираем
Выражение =0 or =1
Описание
в 8:30 запуск скрипта
Цикл перебора IP районов, подстановка даты в имя файла
\\192.168.%1.7\backups\BD_%y%.%m%.%d%.*
Копия файла в архив каждый день сравниваем имя архива с текущей датой если = то проверяем дату изменения архива если текущая дата= то 1 если нет то 0
1 -файл есть
0 — файла нет
Скрипт 40.90 D:\Backaps\zabbix_bk\copy_bk_fs.bat
Последнее значение: (

Группа элементов trapbackup
Элемент Создаем для каждой подсети
имя FS01 not_arxbackup
Тип Zabbix траппер
Ключ not_arxbackups101.7
Тип информации Числовой
История 90d

Описание Файл выгруженный из базы SQL и зархивированый в архив на ФС
Текущего дня
1 -файл есть
0 — файла нет
\\FS101\backups
BD_ГГГГ.ММ.ДД.zip

Описание
в 8:30 запуск скрипта
Цикл перебора IP районов, подстановка даты в имя файла
\\192.168.%1.7\backups\DB_%y%.%m%.%d%.*
Копия файла в архив каждый день сравниваем имя архива с текущей датой если = то проверяем дату изменения архива если текущая дата= то 1 если нет то 0
1 -файл есть
0 — файла нет
Скрипт 40.90 D:\Backaps\zabbix_bk\copy_bk_fs.bat
Последнее значение: (

nodata если нет никаких данных за 24 часа 1 , если данные есть 0 или
Проверяем что архив не битый
Старый делим на новый должно быть не меньше 1.1
Значение должно быть в районе 1 Нет данных или больше 10% процентов разница

Элемент
Имя BkSizeFsBD101
Тип Zabbix Траппер
Ключ bksizefs101
Тип информации Целое число
Единица измерения b
Хранение 14d
Описание
Размер файла последнего бекапа BD на ФС
Каждый день
:: Запрос размера файла
for %%w in (\\192.168.%1.7\backups\BD_%y%.%m%.%d%.*) do set sizeesrn=%%

Группа элементов LogTrapperBakup
Элемент bklogforfs101
Тип Zabbix Траппер
Ключ bklogforfs101
Тип информации Текст
Период хранения истории 14d
Описание
Структура каталога каждый день
::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.%1.3\for_fs\*.bak’) do

Элемент
Имя LogBkFS101
Тип Zabbix Траппер
Ключ logbkfs101
Тип информации Текст
Период хранения истории 14d
Описание
Структура каталога каждый день на ФС Копии BD
::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.%1.7\backups\’) do

@echo off
color 1a

:: Скрипт минус 1 день
setlocal enabledelayedexpansion
::День
set d=%date:

6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:

1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:

1%
:: Определение кл-ва дней в феврале высокосный год или нет от 0 до 3
:: %Деление по модулю является остаток от целочисленного деления
set /a feb=y%%4
:: Если високосный будет 0=0 значит 29 если не равно значит 28 дней
if %feb%==0 (set feb=29) else (set feb=28)
:: Минус 1 месяц
set /a tok=m-1
::Проверка января если месяц 1 -1=0 значит месяц 12
if %tok%==0 set tok=12
::Значение минус месяц деление по модулю четного числа
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
:: минус 1 день set /a d-=1
set /a d-=1
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)
set d=0%d%
set m=0%m%
set yesterday=%d:

-2%.%y%
::Так как даты сравнивает до точки, делаем дату единым числом ггггммдд
set numyesterday=%y%%m:

-2%
::Конец скрипта минус 1 день
setlocal DISABLEDELAYEDEXPANSION

::С 00 05ч каждый день кроме СБ и ВС дифах Имя файла минус день проверка в 9 00 (файл diff_17.09.2019.7z 17.09.2019 8:02)
::Переменная пути на файл
set «sourcePath=D:\!BackupsDoks\diff_mounts\diff_%%a.%%b.%%c.7z»
:: Запрос содержание данной директории в текстовом формате
for /f «Skip=5 eol= delims=» %%p in (‘dir D:\!BackupsDoks\diff_mounts\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k BkLogDiffFS17.9 -o «%%p»)
:: Запрашиваем содержимое папки ищем строки с архивом оставляем 4 столбец имя арахива обрезаем по _
for /F » tokens=7,8,9 delims=.|_ » %%a in (‘dir D:\!BackupsDoks\diff_mounts\^|FIND /I «7z»‘) do (
::Дата файла больше или равно >= минус текущий день (если да выполняем скрипт дальше)
if %%c%%b%%a GEQ %numyesterday% (
:: Запрос размера файла
for %%k in («%sourcePath%») do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k BkSizeDiffFS17.9 -o «%%

zk»)
::День недели
for /f «Skip=1» %%d In (‘WMIC Path Win32_LocalTime Get DayOfWeek’) do (
:: Проверка с понедельниа по субботу включительно
if %%d GEQ 1 (
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
::Дата изменения файла больше или равно минус текущий день
if %%l%%k%%j GEQ %numyesterday% (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k DiffFsBk17.9 -o 1) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k DiffFsBk17.9 -o 0)
)
)
)
)
)
)
)
)

::С 7 00ч суббота раз в неделю (суботы на воскресенье) Имя файла минус день проверка в 9 00 ВС (файл full.7z 13.09.2019 20:45)
::Переменная пути на файл
set «sourcePath=D:\!BackupsDoks\FULL_mounts\full.7z»
:: Запрос содержание данной директории в текстовом формате
for /f «Skip=5 eol= delims=» %%p in (‘dir D:\!BackupsDoks\FULL_mounts\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k BkLogFullFS17.9 -o «%%p»)
::День недели
for /f «Skip=1» %%d In (‘WMIC Path Win32_LocalTime Get DayOfWeek’) do (
if %%d == 0 (
:: Проверка Воскресенье
:: Запрос размера файла
for %%k in («%sourcePath%») do set BkSizeFullFS=%%

zk
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
::Дата изменения файла больше или равно минус текущий день
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
if %%l%%k%%j GEQ %numyesterday% (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k FullFSBk17.9 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k BkSizeFullFS17.9 -o %BkSizeFullFS%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k FullFSBk17.9 -o 0)
)
)
)
)
)
)

::С 7 00ч в ВС раз в неделю (вс до пн) Имя файла минус день проверка в 9 00 ПН (файл full1s02.08.2020.7z)
::Переменная пути на файл
set «sourcePath=D:\!BackupsDoks\1s_mounts\full1s%%b.%%c.%%d.7z»
:: Запрос содержание данной директории в текстовом формате
for /f «Skip=5 eol= delims=» %%p in (‘dir D:\!BackupsDoks\1s_mounts\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k BkLog1sFS17.9 -o «%%p»)
::День недели
for /f «Skip=1» %%d In (‘WMIC Path Win32_LocalTime Get DayOfWeek’) do (
:: Проверка Понедельник
if %%d == 1 (
:: Запрашиваем содержимое папки ищем строки с архивом оставляем 4 столбец имя арахива оставляем дату из имени
for /F » tokens=7,8,9 delims=_|full1s|. » %%b in (‘dir D:\!BackupsDoks\1s_mounts\^|FIND /I «7z»‘) do (
::Дата файла больше или равно >= минус текущий день (если да выполняем скрипт дальше)
if %%d%%c%%b GEQ %numyesterday% (
:: Запрос размера файла
for %%k in («%sourcePath%») do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k BkSize1sFS17.9 -o «%%

Читайте также:  Служба mysql неожиданно прервана windows 10

zk»)
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
::Дата изменения файла больше или равно минус текущий день
if %%l%%k%%j GEQ %numyesterday% (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k 1sFSBk17.9 -o 1) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s BUHSER -k 1sFSBk17.9 -o 0)
)
)
)
)
)
)
)
)

:: Удаление старых логов более 31 день
forfiles /p «%

dp0log» /S /D -31 /C «cmd /c del /f /a /q @file»

Dim strFolder
Dim strMask
Dim strServerName

Dim objFSO
Dim objRegExp
Dim objFile

Dim WshShell
Set WshShell = WScript.CreateObject(«WScript.Shell»)

Dim xmlHTTP, adr, PostData, strDate
Set xmlHTTP = CreateObject(«Microsoft.XMLHTTP»)
adr=»http://192.168.175.4/glpi/journals/addRecord.php»

Public Filials
Filials = 0

strMask = Right(0 & Year(Date), 4) & «.» & Right(0 & Month(date), 2) & «.» & Right(0 & Day(date), 2)
strDate = Right(0 & Day(date), 2) & «.» & Right(0 & Month(date), 2) & «.» & Right(0 & Year(Date), 4)

For n=1 to 28
if n Показать

Группа trapbackup
Имя backup01
Тип Zabbix траппер
Ключ backup01
Тип информации Числовой целое
Единица измерения b
Период хранения истории 90d

Описание
nodata если нет никаких данных за 24 часа 1 , если данные есть 0 или
Проверяем что архив не битый
Старый делим на новый должно быть не меньше 1.1
Значение должно быть в районе 1

@echo off
color 1a
:: Перед проверкой удалим лог предыдущий
DEL /F /S /Q /A «D:\report.txt»

TITLE proverka serverov
:proverka ping
:: сервер 1
echo SR01
ping -n 4 192.168.101.3 | find «TTL=» > nul
if %ERRORLEVEL% EQU 0 echo conect
if %ERRORLEVEL% EQU 1 echo ping 1xx.3 disconect >> D:\report.txt
:proverka
:: сервер 2
echo FSS101
ping -n 4 192.168.101.7 | find «TTL=» > nul
if %ERRORLEVEL% EQU 0 echo conect
if %ERRORLEVEL% EQU 1 echo ping 2xx.7 disconect >> D:\report.txt
TIMEOUT /T 2
cls

set «sourcePath=\\192.168.101.3\basebackup\for_fs»
set good=0
set needDate=%date%

for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

if %good% == 0 (
echo 1XX.3 Not found backup dated %needDate% >> D:\report.txt
)

set «sourcePath=\\192.168.101.7\esrn-backups»
set good=0
set needDate=%date%

for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

if %good% == 0 (
echo 1XX.7 Not found backup dated %needDate% >> D:\report.txt
)

dir /b/a-d/s «D:\report.txt» && START «Pohta» Batpohta.bat || echo Bad!

Напрямую батник не может отправить сообщение используем для этого библиотеки и приложение blat
Копируем 4 файла из папки full в папку System32

Команда в батнике
set file_blat=blat.exe – Запуск вспомогательной програмки
set file_text=D:\report.txt — Блокнот из которого берется текст сообщения
set file_log=D:\log_blat.txt – Лог исполнения
set from_server=127.0.0.1 – сервер исходящей почты
set from_port=587 – порт исходящей почты
set from_mail=логин@mail.ru — Данные пользователя от которого будет отправлено сообщение
set from_name=логин@mail.ru — Данные пользователя от которого отправляется сообщение
set from_pass=**** — Пароль
set to_mail=логин@mail.ru – Кому отправляем
set to_subject=»Rezervnai copy fs101″ – Тема сообщения
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -to %to_mail% -s %to_subject% -log %file_log% — Исполняющая команда

Если в почте используется SSL нужна еще одна прогрммка например stunnel-5.44-win32-installer Запускается служба
https://www.stunnel.org/downloads.html

Устанавливаем редактируем файлик C:\Program Files (x86)\stunnel\stunnel.conf
например для майла
[mail-pop3]
client = yes
accept = 127.0.0.1:110
connect = pop.mail.ru:995
[mail-smtp]
client = yes
accept = 127.0.0.1:587
connect = smtp.mail.ru:465

В свою очередь программа переадресовывает на локальный адрес 127.0.0.1 который мы указали в батнике
На основе https://infostart.ru/public/403899/
После перезапуска компа программа не стартанула stunnel AllUsers и поста не отправлялась команда отрабатывала сама отправка не происходила

Команда DIR позволяет отобразить список файлов и подкаталогов для указанного каталога. Список может быть отсортирован по множеству критериев, задаваемых параметрами командной строки.
Формат командной строки:
DIR [диск:][путь][имя_файла] [/A[[:]атрибуты]] [/B] [/C] [/D] [/L] [/N] [/O[[:]порядок]] [/P] [/Q] [/S] /T[[:]время]] [/W] [/X] [/4]

Параметры командной строки:
[диск:][путь][имя_файла] — Диск, каталог и/или файлы, которые следует включить в список.

/A — Вывод файлов с указанными атрибутами:
D Каталоги
R Доступные только для чтения
H Скрытые файлы
A Файлы для архивирования
S Системные файлы
Префикс «-» имеет значение НЕ
-S НЕ системные файлы.

/B — Вывод только имен файлов.
/C — Применение разделителя групп разрядов для вывода размеров файлов (по умолчанию). Для отключения этого режима служит ключ /-C.
/D — Вывод списка в несколько столбцов с сортировкой по столбцам.
/L — Использование нижнего регистра для имен файлов.
/N — Отображение имен файлов в крайнем правом столбце.
/O — Сортировка списка отображаемых файлов.

Порядок: N По имени (алфавитная), S По размеру (сперва меньшие), E По расширению (алфавитная), D По дате (сперва более старые), G Начать список с каталогов. Префикс «-» имеет значение НЕ
/P — Пауза после заполнения каждого экрана.
/Q — Вывод сведений о владельце файла.
/R — Отображение альтернативных потоков файлов.
/S — Вывод списка файлов из указанного каталога и его подкаталогов.
/T — Выбор поля времени для отображения и сортировки

время:
C Создание (время создания — Create )
A Последнее использование (последний доступ — Accsess )
W Последнее изменение (последняя модификация Write)
/W — Вывод списка в несколько столбцов.
/X — Отображение коротких имен для файлов, чьи имена не соответствуют стандарту 8.3. Формат аналогичен выводу с ключом /N, но короткие имена файлов выводятся слева от длинных. Если короткого имени у файла нет, вместо него выводятся пробелы.
/4 — Вывод номера года в четырехзначном формате

Стандартный набор ключей можно записать в переменную среды DIRCMD. Для отмены их действия введите в команде те же ключи с префиксом «-«, например: /-W
dir 123.txt /T:C покажет дату создания.
dir 123.txt /T:W покажет дату изменения.
dir «*»

tI — переменная %I расширяется до даты /времени файла
EQU — равно, идентично оператору ==
NEQ — не равно
LSS — меньше, чем
LEQ — меньше или равно
GTR — больше, чем
GEQ — больше или равно
а ключ /I, если он указан, задает сравнение текстовых строк без учета регистра

команда1 & команда2 — Используется для разделения нескольких команд в одной командной строке. В cmd.exe выполняется первая команда, затем вторая команда.

команда1 && команда2 — Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.

команда1 || команда2 — Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).

:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:

1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:

:: Определение кл-ва дней в феврале высокосный год или нет от 0 до 3
:: %Деление по модулю является остаток от целочисленного деления
set /a feb=y%%4
:: Если високосный будет 0=0 значит 29 если не равно значит 28 дней
if %feb%==0 (set feb=29) else (set feb=28)

::високосным является не год, который делится без остатка на 4, а тот, который делится на 4, кроме тех, которые делятся на 100, но не делятся на 400
::set /a feb1=y%% 100
::set /a feb2=y%% 400

::set IsLeapYear=No
::if !feb2!==0 (set IsLeapYear=Yes) else (
::if !feb2!==0 (
::if not !feb1!==0 (set IsLeapYear=Yes)
::)
::)

:: Минус 1 месяц
set /a tok=m-1
::Проверка января если месяц 1 -1=0 значит месяц 12
if %tok%==0 set tok=12
::Цифра месяца соответствует порядковому номеру в скобках
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
:: минус 1 день set /a d-=1
set /a d-=1
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)
set d=0%d%
set m=0%m%
set yesterday=%d:

-2%.%y%
::Конец скрипта минус 1 день
setlocal DISABLEDELAYEDEXPANSION

Как в скрипте находится високосный год например)
% деление по модулю является остаток от целочисленного деления
2019:4 = 504.75
504*4 = 2016
2019-2016=3

2020:4 = 505
505*4 = 2020
2020-2020 = 0

2021:4 = 505.25
505*4 = 2020
2021-2020 = 1
и так по кругу и узнаем високосный год))

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

Сообщение Артём Мамзиков » Пт сен 27, 2019 16:49 #2

Запилено все в один скрипт можно было сделать все разными скриптами и планировщиком заданий было бы проще

Проверка в 5 директориях в разные дни и недели
Нас хранилище
Описание как проверяем
\\192.168.175.59\директория\BACKFS\DOM\
Ежедневно в 6.26 full12.09.2019 файл на каждый день (множество файлов)
Идем в папку находим файл текущей датой Идем в папку находим файл текущей датой сегодня если нет ошибка если да то 1
Триггер задан нет данных за 24 ошибка и так же если значение не 1 за 24 часа ошибка

\\192.168.175.59\директория\BACKFS\ZimbraBK\
архив зимбры каждый четверг 7:50 ZimbraBK.tar 8:15 один файл
Идем в папку находим файл с раширением gz если нет ошибка , проверяем день недели если не 4 четверг то ошибка , если 4 то продолжаем
скрипт файл найден проверяем то что изменения его сегодня если нет ошибка если да то 1
Триггер задан нет данных за 7дней ошибка и так же если значение не 1 за 7 дней ошибка

\\192.168.175.59\директория\BACKFS\Proxmox\
каждый понедельник 23:30 ProxmoxBK_2019-09-09.tar 09.09.2019 23:30
Идем в папку находим файл минус 1 день на моент проверки для сравнения т.к. проверяем утром во Вторник (а скрипт понедельник вечер)
файл найден сравниваем то что сегодня вторник. если вторник то сравниваем дату изменения файла понедельника совпало ОК 1 во всех остальных случаях 0
Триггер задан нет данных за 7дней ошибка и так же если значение не 1 за 7 дней ошибка

\\192.168.175.59\директория\BACKFS\Docs\FULL_mounts\
туда скидываеться архив каждую суботу начала месяца 6:20
Имя 03.08.2019_-7d дата изменения 28.07.2019 5:30 Создания 28.07.2019 5:30 Вс (отличие даты 6 дней)
бэк кидаеться туда позже на неделю сначала имя full кнему неделю делаются диференцированные бэки, а через неделю он переименовываеться и отправляеться в копии и дата
Идем в папку находим файл текущей датой на день проверки это первая суббота месяца Идем в папку находим файл с датой минус 6 дней от текущей и сравниваем если все Ок то значение 1
Триггер если данных нет за 36 день (так как суббота может быть 1 числом месяца 31 +5 максимальное количество ожидания),
так как данные приходят только именно в 1 субботу месяца они могут быть 1 или 0 то 2 проверка будет .last()=0

\\192.168.175.59\дириктория\BACKFS\Docs\
туда скидываеться архив каждую суботу 2,3,4,5 недели месяца 6:20
Имя 03.08.2019_-7d дата изменения 28.07.2019 5:30 Создания 28.07.2019 5:30 Вс (отличие даты 6 дней)
бэк кидаеться туда позже на неделю сначала имя full кнему неделю делаются диференцированные бэки, а через неделю он переименовываеться и отправляеться в копии и дата
Идем в папку находим файл текущей датой на день проверки это субботы месяца Идем в папку находим файл с датой минус 6 дней от текущей и сравниваем если все Ок то значение 1
Триггер если данных нет за 14 день (так как вс может быть 1 числом месяца 7 это 1 суббота, 14 вторя неделя субботы поэтому 14 максимальное количество ожидания),
так как данные приходят только именно в 1 субботу месяца они могут быть 1 или 0 то 2 проверка будет .last()=0

Запрашивается Лог по содержанию папки , Размер проверяемого файла, Значение самой проверки 0 или 1
(в некоторых случаях данные идут только в определенный день когда условия цикла совпадают равны текущей недели и конкретному дню, можно спустить ответ цикла в завершение определенной части скрипта и ответ будет приходить каждый день но в это случае сложнее задать триггер)

Переменная пути на файл (обратить внимание где переменная на файл и в нее попадают несколько файлов например *7z, если цикл выше не соотвествует непрошла проверка по дате, то ниже цикл по файлам переменной проверит их все равно и это будет не корректно будет верный файл 1 и еще прилетит 0 так же и поразмерам файла)

@echo off
color 1a

::Формируем дату для сравнение одним занчением yyyymmdd
::День
set d=%date:

set yyyymmdd=%y%%m%%d%
set dd_mm_yyyy=%d%_%m%_%y%

:: Проверка копии в архиве каждый день (имя архива full12.09.2019.7z в 6:30)
:: Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\172.16.14.9\Volume_1\BACKFSCentr\DOM\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k log_fullbackups -o «%%p»)
:: Переменная пути на файл
set «sourcePath=\\172.16.14.9\Volume_1\BACKFSCentr\DOM\full%date%.7z»
:: Переменная если файл не найден ошибка
set good=0
:: Запрос содержание данной директории в текстовом формате
for %%k in («%sourcePath%») do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k size_fullbackups -o «%%

zk»)
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
::Дата изменения файла меньше или равно = = минус текущий день (если да выполняем скрипт дальше)
if %%d%%c%%b GEQ %yesterdas% (
:: Запрос размера файла
for %%k in («%sourcePath%») do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k sizefullmounts14.53 -o «%%

zk»)
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
::Дата изменения файла меньше или равно = = минус текущий день (если да выполняем скрипт дальше)
if %%d%%c%%b GEQ %yesterdas% (
:: Запрос размера файла
for %%k in («%sourcePath%») do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k sizedocs14.53 -o «%%

Читайте также:  Android x86 ndk windows

zk»)
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
::Дата изменения файла меньше или равно = > %

Запуск скрипта ежедневно в 9:00 12:03 16:30 23:45

\\16.172.40.9\Volume\BACKFSCentr\DOM\full%date%.7z
Ежедневно в 6.26 full12.09.2019 файл на каждый день (множество файлов)
Идем в папку находим файл текущей датой сегодня (дата изменения меньше или равна сегодня) если нет ошибка если да то 1
Триггер задан нет данных за 24 ошибка и так же если значение не 1 за 24 часа ошибка

Элементы log_fullbackups , size_fullbackups , not_fullbackups

\\16.172.40.9\Volume\BACKFSCentr\ZimbraBK\*.tar.gz
перенесены на выходные(проверка в воскресенье)
архив зимбры каждый четверг или пятницу 7:50 ZimbraBK.tar 8:15 один файл
Идем в папку находим файл с раширением gz если нет ошибка , проверяем день недели если не 0 Воскресенье то завершаем , если 0 то продолжаем
скрипт файл найден проверяем то что Дата изменения файла больше или равно минус текущий день (т е проверка воскресенье дата субботы или новее должна быть изменения файла)
если нет ошибка если да то 1

Триггер задан нет данных за 7дней ошибка и так же если значение не 1 за 7 дней ошибка

Элементы logZimbraBK40.9 , sizeZimbraBK40.9 , ZimbraBK40.9

\\16.172.40.9\Volume\BACKFSCentr\Proxmox\
каждый понедельник 23:30 ProxmoxBK_2019-09-09.tar 09.09.2019 23:30
Идем в папку находим файл минус 1 день на моент проверки для сравнения т.к. проверяем утром во Вторник (а скрипт понедельник вечер)
файл найден сравниваем то что сегодня вторник. если вторник то сравниваем дату изменения файла понедельника совпало ОК 1 во всех остальных случаях 0
Имя файла минус один день подставляем Дата изменения файла больше или равно от даты сравнения минус текущий день
Триггер задан нет данных за 7дней ошибка и так же если значение не 1 за 7 дней ошибка

Элемент logProxmox40.9 , sizeProxmoxBK40.9 , ProxmoxBK40.9

Проверка каждый день ЭЛМЫ 40.93
путь на файл .bak
\\16.172.40.93\Backs2\elma_backup\elma_backup_day\ELMA_%dd_mm_yyyy%\ELMA3_backup_%denyyyy_mm_dd%_*.bak
Элементы logElmaBK40.93 , sizeElmaBK40.93 , ElmaBK40.93

путь на файл .trn
\\16.172.40.93\Backs2\elma_backup\elma_backup_day\ELMA_%dd_mm_yyyy%\ELMA3_backup_%denyyyy_mm_dd%_*.trn
Элементы sizeElmaTRN40.93 , ElmaTRN40.93

Проверка каждый день ЭЛМЫ .40.12
путь на файл .bak
\\16.172.40.12\d$\backupelma_full\elma\ELMA_%dd_mm_yyyy%\ELMA3_backup_%denyyyy_mm_dd%_*.bak
Элементы logElmaBK40.12 , sizeElmaBK40.12 , ElmaBK40.12

путь на файл .trn
\\16.172.40.12\d$\backupelma_full\elma\ELMA_%dd_mm_yyyy%\ELMA3_backup_%denyyyy_mm_dd%_*.trn
Элементы sizeElmaTRN40.12 , ElmaTRN40.12
Имя файла и папки подставляем минус один день
Дата изменения файла больше или равно минус текущий день

\\16.172.40.93\Backs2\Docs\FULL_mounts\%%b_-7d.7z
туда скидываеться архив каждую суботу начала месяца 6:20
Имя 03.08.2019_-7d дата изменения 28.07.2019 5:30 Создания 28.07.2019 5:30 Вс (отличие даты 6 дней)
бэк кидаеться туда позже на неделю сначала имя full кнему неделю делаются диференцированные бэки, а через неделю он переименовываеться и отправляеться в копии и дата
Идем в папку находим файл текущей датой на день проверки это первая суббота месяца Идем в папку находим файл с датой минус 6 дней от текущей и сравниваем если все Ок то значение 1
Проверка 1-ая неделя месяца, день пятница и суббота, ищем имя архива с датой от пятницы и новее текущей недели, Дата изменения файла меньше или равно = = минус текущий день, Дата изменения файла меньше или равно = Пример скриптов.zip Пример скриптов.zip (7.53 КБ) 5 скачиваний

@echo off
color 1a

:: Проверка копии в архиве каждый день (имя архива full12.09.2019.7z в 6:30)
:: Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.175.59\директория\BACKFS\DOM\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k log_fullbackups -o «%%p»)
:: Запрос содержание данной директории в текстовом формате
for %%k in (\\192.168.175.59\директория\BACKFS\DOM\full%date%.7z) do set sizefull=%%

zk
:: Переменная пути на файл
set «sourcePath=\\192.168.175.59\директория\BACKFS\DOM\full%date%.7z»
:: Переменная если файл не найден ошибка
set good=0
::Текущая дата дд.мм.гггг
set needDate=%date%
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
if %%j.%%k.%%l == %needDate% (
:: Если файл найден то good=1
set good=1
)
)
)
:: Сюда попадает ответ переменной good 0 или 1 для сравнения
if %good% == 1 (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_fullbackups -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k size_fullbackups -o %sizefull%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k not_fullbackups -o 0)

:: Проверка копий по дням недели Где понедельник — 1 ,Суббота — 6 , Воскресенье — 0
:: Проверка копии в архиве на Файловом Четверг (имя архива ZimbraBK.tar в 8:20)
:: Переменная пути на файл
set «sourcePath=\\192.168.175.59\директория\BACKFS\ZimbraBK\*.gz»
:: Переменная если файл не найден, не совпала дата изменения с текущей или не первый четверг в месяце то ошибка
set good=0
::День недели
for /f «Skip=1» %%d In (‘WMIC Path Win32_LocalTime Get DayOfWeek’) do (
if %%d == 4 (
:: Если 4 Четрверг
:: Запрос содержание данной директории в текстовом формате
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.175.59\директория\BACKFS\ZimbraBK\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k logZimbraBK175.59 -o «%%p»)
:: Запрос размера файла
for %%k in (\\192.168.175.59\директория\BACKFS\ZimbraBK\*.gz) do set sizeZimbraBK=%%

zk
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
if %%j.%%k.%%l == %Date% (
set good=1
)
)
)
)
)
)
:: Сюда попадает ответ переменной good 0 или 1 для сравнения
if %good% == 1 (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k ZimbraBK175.59 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k sizeZimbraBK175.59 -o %sizeZimbraBK%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k ZimbraBK175.59 -o 0)

:: Проверка копий по дням недели Где понедельник — 1 ,Суббота — 6 , Воскресенье — 0
:: Проверка копии архива Понедельник проверяем утро Вторник (имя архива ProxmoxBK_2019-09-09.tar в 23:30)
:: Переменная если файл не найден, не совпала дата изменения с текущей или не понедельник то ошибка
set good=0
:: Скрипт минус 1 день
setlocal enabledelayedexpansion
::День
set d=%date:

6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:

1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:

1%
:: Определение кл-ва дней в феврале высокосный год или нет от 0 до 3
:: %Деление по модулю является остаток от целочисленного деления
set /a feb=y%%4
:: Если високосный будет 0=0 значит 29 если не равно значит 28 дней
if %feb%==0 (set feb=29) else (set feb=28)
:: Минус 1 месяц
set /a tok=m-1
::Проверка января если месяц 1 -1=0 значит месяц 12
if %tok%==0 set tok=12
::Цифра месяца соответствует порядковому номеру в скобках
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
:: минус 1 день set /a d-=1
set /a d-=1
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)
set d=0%d%
set m=0%m%
set yesterday=%d:

-2%
::Конец скрипта минус 1 день
setlocal DISABLEDELAYEDEXPANSION
:: Переменная пути на файл
set «sourcePath=\\192.168.175.59\директория\BACKFS\Proxmox\ProxmoxBK_%ryesterday%.tar.gz»
::День недели
for /f «Skip=1» %%d In (‘WMIC Path Win32_LocalTime Get DayOfWeek’) do (
if %%d == 2 (
::Если 2 вторник
::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.175.59\директория\BACKFS\Proxmox’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k logProxmox175.59 -o «%%p»)
:: Запрос размера файла
for %%k in (\\192.168.175.59\директория\BACKFS\Proxmox\ProxmoxBK_%ryesterday%.tar.gz) do set sizeProxmoxBK=%%

zk
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
if %%j.%%k.%%l == %yesterday% (
set good=1
)
)
)
)
)
)
:: Сюда попадает ответ переменной good 0 или 1 для сравнения
if %good% == 1 (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k ProxmoxBK175.59 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k sizeProxmoxBK175.59 -o %sizeProxmoxBK%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k ProxmoxBK175.59 -o 0)

:: Скрипт минус 6 день
setlocal enabledelayedexpansion
::День
set d=%date:

6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:

1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:

1%
:: Определение кл-ва дней в феврале высокосный год или нет от 0 до 3
:: %Деление по модулю является остаток от целочисленного деления
set /a feb=y%%4
:: Если високосный будет 0=0 значит 29 если не равно значит 28 дней
if %feb%==0 (set feb=29) else (set feb=28)
:: Минус 1 месяц
set /a tok=m-1
::Проверка января если месяц 1 -1=0 значит месяц 12
if %tok%==0 set tok=12
::Цифра месяца соответствует порядковому номеру в скобках
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
:: минус 6 день set /a d-=6
set /a d-=6
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)
set d=0%d%
set m=0%m%
set yesterday=%d:

-2%.%y%
::Конец скрипта минус 6 день
setlocal DISABLEDELAYEDEXPANSION

:: Проверка копий по дням недели Где понедельник — 1 ,Суббота — 6 , Воскресенье — 0
:: Проверка копии в архиве на Файловом первая Суббота месяца (имя архива 07.09.2019_-7d в 6:20)
:: бэк кидаеться туда позже на неделю сначала имя full кнему неделю делаются диференцированные бэки, а через неделю он переименовываеться и отправляеться в копии и дата Имя 03.08.2019_-7d дата изменения 28.07.2019 5:30 5:30 Вс (отличие даты 6 дней)
:: Переменная пути на файл
set «sourcePath=\\192.168.175.59\директория\BACKFS\Docs\FULL_mounts\%date%_-7d.7z»
:: Переменная если файл не найден, не совпала дата изменения с текущей или не суббота то ошибка
set good=0
::Номер недели в месяце от 1 до 5 отсчет от ВС
for /f «Skip=1» %%e In (‘WMIC Path Win32_LocalTime Get WeekInMonth’) do (
if %%e == 1 (
::Если первая неделя месяца продолжить
::День недели
for /f «Skip=1» %%d In (‘WMIC Path Win32_LocalTime Get DayOfWeek’) do (
if %%d == 6 (
:: Если 6 суббота
::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.175.59\директория\BACKFS\Docs\FULL_mounts\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k logfullmounts175.59 -o «%%p»)
:: Запрос размера файла
for %%k in (\\192.168.175.59\директория\BACKFS\Docs\FULL_mounts\%date%_-7d.7z) do set fullmounts=%%

zk
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
if %%j.%%k.%%l == %yesterday% (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k mounts175.59 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k sizefullmounts175.59 -o %fullmounts%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k mounts175.59 -o 0)
)
)
)
)
)
)
)
)

:: Проверка копий по дням недели Где понедельник — 1 ,Суббота — 6 , Воскресенье — 0
:: Проверка копии в архиве на Файловом 2,3,4,5 Суббота месяца (имя архива 07.09.2019_-7d в 6:20)
:: бэк кидаеться туда позже на неделю сначала имя full кнему неделю делаются диференцированные бэки, а через неделю он переименовываеться и отправляеться в копии и дата Имя 03.08.2019_-7d дата изменения 28.07.2019 5:30 5:30 Вс (отличие даты 6 дней)
:: Переменная пути на файл
set «sourcePath=\\192.168.175.59\директория\BACKFS\Docs\%date%_-7d.7z»
:: Переменная если файл не найден, не совпала дата изменения с текущей или не суббота то ошибка
set good=0
::Номер недели в месяце от 1 до 5 отсчет от ВС (Skip пропуск строк в цикле которые нужно пропустить убираем WeekInMonth оставляем числовое значение)
for /f «Skip=1» %%e In (‘WMIC Path Win32_LocalTime Get WeekInMonth’) do (
if %%e GTR 1 (
::Если неделя месяца не первая продолжить (GTR — больше, чем)
::День недели
for /f «Skip=1» %%d In (‘WMIC Path Win32_LocalTime Get DayOfWeek’) do (
if %%d == 6 (
:: Если 6 суббота
::Запрос содержание данной директории в текстовом формате циклом для каждого файла
for /f «Skip=5 eol= delims=» %%p in (‘dir \\192.168.175.59\директория\BACKFS\Docs\’) do (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k logdocs175.59 -o «%%p»)
:: Запрос размера файла
for %%k in (\\192.168.175.59\директория\BACKFS\Docs\%date%_-7d.7z) do set docs=%%

zk
:: Выполнить цикл на проверку файла переход в директорию проверка строки имени файлов сранение дат
for %%i in («%sourcePath%») do (
for /f «tokens=1-5 delims=.: » %%j in («%%

ti») do (
if %%j.%%k.%%l == %yesterday% (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k Docs175.59 -o 1 & zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k sizedocs175.59 -o %docs%) else (zabbix_sender.exe -z 192.168.175.111 -p 10051 -s FILESERVER1 -k Docs175.59 -o 0)
)
)
)
)
)
)
)
)

dp0log» /S /D -5 /C «cmd /c del /f /a /q @file»
::Для вывода лога из скрипта добавить команду
copy_bk.bat>> %

Для цикла с отдельной процедурой
Продолжения цикла 228 это последний IP в цикле
:: Создание Лога
IF %1==228 call:log
goto:pusto
:log
check_bk_fs.bat>> %

Запустить один раз, и записать лог Прописывается в команде запуска например в планировщике заданий
По сути визуальный вывод перенаправить в лог
Путь запуска батника и после батника указываем вывод в лог
Путь\ИмяФайла.bat>Путь\ИмяЛогФайла.txt
D:\Документы\Desktop\1.bat>>D:\Документы\Desktop\log\%date%copy_bk.log

Пример
Аргумент >>D:\Документы\Desktop\log\%date%copy_bk.log

Так же можно добавить вывод времени
В начало скрипта время начало выполнения
echo Start %time%
В конец скрипта время время завершения выполнения
echo Stop %time%

> — заменить данные лога
>> — Дополнить данные лога
1 — все норм 1>>
2 — ошибки 2>>

dp0log» /S /D -5 /C «cmd /c del /f /a /q @file»
Команда FORFILES является удобным средством выполнения заданных команд для группы файлов в пакетных заданиях.
FORFILES — отобразить список файлов текущего каталога.
/P — Путь, с которого начинается поиск. По умолчанию используется текущая рабочая папка (.).
путь до папка с логами «%

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