- BAT скрипт для резервного копирования папки
- Ссылки
- Функции
- Пример настройки расписания
- BAT скрипт для резервного копирования папки
- Ссылки
- Функции
- Пример настройки расписания
- #Автоматизация #Технологии #Процессы #ИТ #Записки #Журнал #Блог #Форум
- Скрипты резервного копирования и Проверка копий
- Скрипты резервного копирования и Проверка копий
- Скрипты резервного копирования и Проверка копий
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 скрипт для резервного копирования папки
Набросал ещё один маленький 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 файла и два расписания резервного копирования в разные папки.
Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.
#Автоматизация #Технологии #Процессы #ИТ #Записки #Журнал #Блог #Форум
Форум для различных тем в большей части ИТ
Скрипты резервного копирования и Проверка копий
Скрипты резервного копирования и Проверка копий
Сообщение Артём Мамзиков » Пт сен 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)
::високосным является не год, который делится без остатка на 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
Важность выбираем
Выражение
Описание
в 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 «%%
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 «%%
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 — Путь, с которого начинается поиск. По умолчанию используется текущая рабочая папка (.).
путь до папка с логами «%