Все скрипты запускаются через планировщик заданий
Файл БД выгружается SQL Агентом в 20ч
Далее запускается скрипт в 3Ч упаковку в архив созданием имени текущего дня и перемещается на другой сервер
Другой скрипт удаляет старые копии
create_backup.cmd
Показать
::@echo off
color 1a
:: Кодировка
chcp 1251
::Формирование переменной год месяц день
set D=%date:~0,2%
set M=%date:~3,2%
set Y=%date:~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
color 1a
:: Кодировка
chcp 1251
::Формирование переменной год месяц день
set D=%date:~0,2%
set M=%date:~3,2%
set Y=%date:~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
без архива
Показать
::@echo off
color 1a
chcp 1251
set D=%date:~0,2%
set M=%date:~3,2%
set Y=%date:~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
color 1a
chcp 1251
set D=%date:~0,2%
set M=%date:~3,2%
set Y=%date:~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
backup_delete.vbs
Показать
'Создание объектов
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 & " уже подключен"
else
'Подключаем диск Z:
WScript.Sleep 1000
objNetwork.MapNetworkDrive strDriveName, strRemoteShare, false, strUser, strPassw
WScript.Sleep 1000
End If
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)<aFile(j,1) Then
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
objNetwork.RemoveNetworkDrive "Z:"
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 & " уже подключен"
else
'Подключаем диск Z:
WScript.Sleep 1000
objNetwork.MapNetworkDrive strDriveName, strRemoteShare, false, strUser, strPassw
WScript.Sleep 1000
End If
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)<aFile(j,1) Then
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
objNetwork.RemoveNetworkDrive "Z:"
в 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
Получаем размер файла Проверяем что архив не битый высчитываем разность за сутки
Старый делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1
Так же получаем содержимое папки имя файла дата изменения размер в виде лога
Проверка файла выгруженного из SQL далее его упаковка в архив и копирование на другой сервер проверка
check_bk_fs.bat
Показать
@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,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%date:~6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:~0,1%==0 set d=%d:~1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:~0,1%==0 set m=%m:~1%
:: Определение кл-ва дней в феврале высокосный год или нет от 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%%d:~-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:~0,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%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
::log
::check_bk_fs.bat>> %~dp0log\%date%check_bk_fs.log|goto:eof
::pusto
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,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%date:~6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:~0,1%==0 set d=%d:~1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:~0,1%==0 set m=%m:~1%
:: Определение кл-ва дней в феврале высокосный год или нет от 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%%d:~-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:~0,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%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
::log
::check_bk_fs.bat>> %~dp0log\%date%check_bk_fs.log|goto:eof
::pusto
check_bk_fs.bat
Показать
@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,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%date:~6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:~0,1%==0 set d=%d:~1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:~0,1%==0 set m=%m:~1%
:: Определение кл-ва дней в феврале высокосный год или нет от 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%.%m:~-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:~0,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%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)
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,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%date:~6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:~0,1%==0 set d=%d:~1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:~0,1%==0 set m=%m:~1%
:: Определение кл-ва дней в феврале высокосный год или нет от 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%.%m:~-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:~0,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%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)
Элементы и Триггеры к check_bk_fs.bat
Показать
Повторяем создание для каждой подсети
Элементы и триггеры для файла из SQL
Показать
Группа элементов 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 {ITEM.LASTVALUE}
Важность выбираем
Выражение {FILESERVER1:not_backup101.3.last(#1)}=0 or {FILESERVER1:not_backup101.3.nodata(24h)}=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
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
Элемент Создаем для каждой подсети
имя SR01 not_backup
Тип Zabbix траппер
Ключ not_backup101.3
Тип информации Числовой
История 90d
Файл выгруженный из базы SQL для упаковки в архив копии на ФС
За вечер предыдущего дня
1 -файл есть
0 - файла нет
\\SRXX\for_fs
Not 1XX.3 sitex_bd_rXX.bak
Триггер
Имя SR01 sitex backup {ITEM.LASTVALUE}
Важность выбираем
Выражение {FILESERVER1:not_backup101.3.last(#1)}=0 or {FILESERVER1:not_backup101.3.nodata(24h)}=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
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
Проверка копий в архиве
Показать
Группа элементов trapbackup
Элемент Создаем для каждой подсети
имя FS01 not_arxbackup
Тип Zabbix траппер
Ключ not_arxbackups101.7
Тип информации Числовой
История 90d
Описание Файл выгруженный из базы SQL и зархивированый в архив на ФС
Текущего дня
1 -файл есть
0 - файла нет
\\FS101\backups
BD_ГГГГ.ММ.ДД.zip
Триггер для каждого элемента
Имя FS01 not_arxbackup {ITEM.LASTVALUE}
Важность выбираете нужную
Выражение:
{FILESERVER1:not_arxbackups101.7.last(#1)}=0 or
{FILESERVER1:not_arxbackups101.7.nodata(24h)}=1 or
{FILESERVER1:bksizefsesrn101.last(#2)}/{FILESERVER1:bksizefsesrn101.last()}<0.9 or {FILESERVER1:bksizefsesrn101.last()}/{FILESERVER1:bksizefsesrn101.last(#2)}>1.1
Описание
в 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
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
nodata если нет никаких данных за 24 часа 1 , если данные есть 0 или
Проверяем что архив не битый
Старый делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1 Нет данных или больше 10% процентов разница
Элемент Создаем для каждой подсети
имя FS01 not_arxbackup
Тип Zabbix траппер
Ключ not_arxbackups101.7
Тип информации Числовой
История 90d
Описание Файл выгруженный из базы SQL и зархивированый в архив на ФС
Текущего дня
1 -файл есть
0 - файла нет
\\FS101\backups
BD_ГГГГ.ММ.ДД.zip
Триггер для каждого элемента
Имя FS01 not_arxbackup {ITEM.LASTVALUE}
Важность выбираете нужную
Выражение:
{FILESERVER1:not_arxbackups101.7.last(#1)}=0 or
{FILESERVER1:not_arxbackups101.7.nodata(24h)}=1 or
{FILESERVER1:bksizefsesrn101.last(#2)}/{FILESERVER1:bksizefsesrn101.last()}<0.9 or {FILESERVER1:bksizefsesrn101.last()}/{FILESERVER1:bksizefsesrn101.last(#2)}>1.1
Описание
в 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
Последнее значение: {ITEM.VALUE} {ITEM.LASTVALUE} ({TIME})
nodata если нет никаких данных за 24 часа 1 , если данные есть 0 или
Проверяем что архив не битый
Старый делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1 Нет данных или больше 10% процентов разница
Запрос размера файла Элементы
Показать
группа элементов SizeTrapperBakup
Элемент
Имя BkSizeforfs101
Тип Zabbix Траппер
Ключ bksizeforfs101
Тип информации Целое число
Единица измерения b
Хранение 14d
Описание
Размер файла последнего бекапа BD
Каждый день
:: Запрос размера файла
for %%w in (\\192.168.%1.3\for_fs\*.bak) do set sizeforfs=%%~zw
Элемент
Имя BkSizeFsBD101
Тип Zabbix Траппер
Ключ bksizefs101
Тип информации Целое число
Единица измерения b
Хранение 14d
Описание
Размер файла последнего бекапа BD на ФС
Каждый день
:: Запрос размера файла
for %%w in (\\192.168.%1.7\backups\BD_%y%.%m%.%d%.*) do set sizeesrn=%%~zw
Элемент
Имя BkSizeforfs101
Тип Zabbix Траппер
Ключ bksizeforfs101
Тип информации Целое число
Единица измерения b
Хранение 14d
Описание
Размер файла последнего бекапа BD
Каждый день
:: Запрос размера файла
for %%w in (\\192.168.%1.3\for_fs\*.bak) do set sizeforfs=%%~zw
Элемент
Имя BkSizeFsBD101
Тип Zabbix Траппер
Ключ bksizefs101
Тип информации Целое число
Единица измерения b
Хранение 14d
Описание
Размер файла последнего бекапа BD на ФС
Каждый день
:: Запрос размера файла
for %%w in (\\192.168.%1.7\backups\BD_%y%.%m%.%d%.*) do set sizeesrn=%%~zw
Элементы для получения содержимого папки лог
Показать
Группа элементов 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
Элемент 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
color 1a
:: Скрипт минус 1 день
setlocal enabledelayedexpansion
::День
set d=%date:~0,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%date:~6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:~0,1%==0 set d=%d:~1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:~0,1%==0 set m=%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%.%m:~-2%.%y%
::Так как даты сравнивает до точки, делаем дату единым числом ггггммдд
set numyesterday=%y%%m:~-2%%d:~-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"
Еще пример на бухсервер
Показать
zabbix_bk.vbs
Показать
'Option Explicit
Dim strFolder
Dim strMask
Dim strServerName
Dim objFSO
Dim objRegExp
Dim objFile
Dim boolFound
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<10 then
strFolder = "\\192.168.10"+CStr(n)+".7\backups\"
strServerName = "0"+CStr(n)
else
strFolder = "\\192.168.1"+CStr(n)+".7\backups\"
strServerName = CStr(n)
End If
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")
With objRegExp
.Pattern = strMask
.IgnoreCase = True
End With
If objFSO.FolderExists(strFolder) Then
boolFound = False
For Each objFile In objFSO.GetFolder(strFolder).Files
If objRegExp.Test(objFile.Name) Then
boolFound = True
PostData = "id=5&f40=Server_" & strServerName & "&f42=full_backup&f43=Windows_Server_2008_R2&f44=.bak&f45=FS2" & strServerName & "&f46=" & strDate & "&f47=" & objFile.Size
xmlHTTP.Open "POST", adr, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHTTP.Send PostData
WshShell.Run "D:\!Backaps\zabbix_bk\zabbix_sender.exe -z 192.168.175.111 -s FILESERVER1 -k trapbackup" & strServerName & " -o " & objFile.Size, 0, true
'WshShell.Run "zabbix_sender.exe -z 192.168.175.111 -s FS" & strServerName & " -k trapbackup03 -o " & objFile.Size, 0, true'
End If
Next
If boolFound Then
Filials = Filials + 1
Else
End If
Else
End If
Set objRegExp = Nothing
Set objFSO = Nothing
next
WScript.Quit 0
Dim strFolder
Dim strMask
Dim strServerName
Dim objFSO
Dim objRegExp
Dim objFile
Dim boolFound
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<10 then
strFolder = "\\192.168.10"+CStr(n)+".7\backups\"
strServerName = "0"+CStr(n)
else
strFolder = "\\192.168.1"+CStr(n)+".7\backups\"
strServerName = CStr(n)
End If
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")
With objRegExp
.Pattern = strMask
.IgnoreCase = True
End With
If objFSO.FolderExists(strFolder) Then
boolFound = False
For Each objFile In objFSO.GetFolder(strFolder).Files
If objRegExp.Test(objFile.Name) Then
boolFound = True
PostData = "id=5&f40=Server_" & strServerName & "&f42=full_backup&f43=Windows_Server_2008_R2&f44=.bak&f45=FS2" & strServerName & "&f46=" & strDate & "&f47=" & objFile.Size
xmlHTTP.Open "POST", adr, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHTTP.Send PostData
WshShell.Run "D:\!Backaps\zabbix_bk\zabbix_sender.exe -z 192.168.175.111 -s FILESERVER1 -k trapbackup" & strServerName & " -o " & objFile.Size, 0, true
'WshShell.Run "zabbix_sender.exe -z 192.168.175.111 -s FS" & strServerName & " -k trapbackup03 -o " & objFile.Size, 0, true'
End If
Next
If boolFound Then
Filials = Filials + 1
Else
End If
Else
End If
Set objRegExp = Nothing
Set objFSO = Nothing
next
WScript.Quit 0
Элемент и Триггер
Показать
Группа trapbackup
Имя backup01
Тип Zabbix траппер
Ключ backup01
Тип информации Числовой целое
Единица измерения b
Период хранения истории 90d
Триггер
Имя NoBackup01
Важность задаем
Выражение
{FILESERVER1:trapbackup01.nodata(24h)}=1 or {FILESERVER1:trapbackup01.last(#2)}/{FILESERVER1:trapbackup01.last()}<0.9 or {FILESERVER1:trapbackup01.last()}/{FILESERVER1:trapbackup01.last(#2)}>1.1
Описание
nodata если нет никаких данных за 24 часа 1 , если данные есть 0 или
Проверяем что архив не битый
Старый делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1
Имя backup01
Тип Zabbix траппер
Ключ backup01
Тип информации Числовой целое
Единица измерения b
Период хранения истории 90d
Триггер
Имя NoBackup01
Важность задаем
Выражение
{FILESERVER1:trapbackup01.nodata(24h)}=1 or {FILESERVER1:trapbackup01.last(#2)}/{FILESERVER1:trapbackup01.last()}<0.9 or {FILESERVER1:trapbackup01.last()}/{FILESERVER1:trapbackup01.last(#2)}>1.1
Описание
nodata если нет никаких данных за 24 часа 1 , если данные есть 0 или
Проверяем что архив не битый
Старый делим на новый должно быть не меньше <0.9 или
новый размер файла делить на старый значение должно быть не больше>1.1
Значение должно быть в районе 1
3.Старая проверка скрипт отправка на почту со своими минусами
Удаляет старый файл report.txt (в который выводятся ошибки проверки)
Проверка доступности пингом БД и ФС
Проверка создался ли новый файл копии на сервере БД из SQL и Архив на ФС
Если есть ошибки создается report.txt со всеми ошибками которые были в процессе
Далее если файл существует запускается батник (лежит в этой же папке что и проверочный на ошибки, если нет надо прописать путь) отправки почты .
Почта берет текст ошибок проверок из этого файла report.txt и отправляет на указанную электронку!
Минусы если сервер был выключен скрипт не отработал можно выставить запускать скрипт если был пропущен запуск, если нет инета почта не уйдет и повторно ничего отправлятся не будет или покакой то причине не отработала почта
Почтовая утилита stunnel-5.44-win32-installer.exe настраивается конфиг почты stunnel.conf
bk_proverka.bat
Показать
@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 ("%%~ti") do (
if %%j.%%k.%%l == %needDate% (
set good=1
)
)
)
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 ("%%~ti") do (
if %%j.%%k.%%l == %needDate% (
set good=1
)
)
)
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!
exit
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 ("%%~ti") do (
if %%j.%%k.%%l == %needDate% (
set good=1
)
)
)
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 ("%%~ti") do (
if %%j.%%k.%%l == %needDate% (
set good=1
)
)
)
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!
exit
Batpohta.bat
Показать
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%
exit
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%
exit
Настройка почтовой программы
Показать
Напрямую батник не может отправить сообщение используем для этого библиотеки и приложение 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 и поста не отправлялась команда отрабатывала сама отправка не происходила
Копируем 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 и поста не отправлялась команда отрабатывала сама отправка не происходила
Некоторые команды cmd
Показать
ASSOC Вывод либо изменение сопоставлений по расширениям имен файлов.
AT Выполнение команд и запуск программ по расписанию.
ATTRIB Отображение и изменение атрибутов файлов.
BREAK Включение/выключение режима обработки комбинации клавиш CTRL+C.
CACLS Отображение/редактирование списков управления доступом (ACL) к файлам.
CALL Вызов одного пакетного файла из другого.
CD Вывод имени либо смена текущей папки.
CHCP Вывод либо установка активной кодовой страницы.
CHDIR Вывод имени либо смена текущей папки.
CHKDSK Проверка диска и вывод статистики.
CHKNTFS Отображение или изменение выполнения проверки диска во время загрузки.
CLS Очистка экрана.
CMD Запуск еще одного интерпретатора командных строк Windows.
COLOR Установка цвета текста и фона, используемых по умолчанию.
COMP Сравнение содержимого двух файлов или двух наборов файлов.
COMPACT Отображение/изменение сжатия файлов в разделах NTFS.
CONVERT Преобразование дисковых томов FAT в NTFS. Нельзя выполнить
преобразование текущего активного диска.
COPY Копирование одного или нескольких файлов в другое место.
DATE Вывод либо установка текущей даты.
DEL Удаление одного или нескольких файлов.
DIR Вывод списка файлов и подпапок из указанной папки.
DISKCOMP Сравнение содержимого двух гибких дисков.
DISKCOPY Копирование содержимого одного гибкого диска на другой.
DOSKEY Редактирование и повторный вызов командных строк; создание макросов.
ECHO Вывод сообщений и переключение режима отображения команд на экране.
ENDLOCAL Конец локальных изменений среды для пакетного файла.
ERASE Удаление одного или нескольких файлов.
EXIT Завершение работы программы CMD.EXE (интерпретатора командных строк) .
FC Сравнение двух файлов или двух наборов файлов и вывод различий между
ними.
FIND Поиск текстовой строки в одном или нескольких файлах.
FINDSTR Поиск строк в файлах.
FOR Запуск указанной команды для каждого из файлов в наборе.
FORMAT Форматирование диска для работы с Windows.
FTYPE Вывод либо изменение типов файлов, используемых при сопоставлении по
расширениям имен файлов.
GOTO Передача управления в отмеченную строку пакетного файла.
GRAFTABL Позволяет Windows отображать расширенный набор символов в графическом
режиме.
HELP Выводит справочную информацию о командах Windows.
IF Оператор условного выполнения команд в пакетном файле.
LABEL Создание, изменение и удаление меток тома для дисков.
MD Создание папки.
MKDIR Создание папки.
MODE Конфигурирование системных устройств.
MORE Последовательный вывод данных по частям размером в один экран.
MOVE Перемещение одного или нескольких файлов из одной папки в другую.
PATH Вывод либо установка пути поиска исполняемых файлов.
PAUSE Приостановка выполнения пакетного файла и вывод сообщения.
POPD Восстановление предыдущего значения текущей активной папки,
сохраненного с помощью команды PUSHD.
PRINT Вывод на печать содержимого текстовых файлов.
PROMPT Изменение приглашения в командной строке Windows.
PUSHD Сохранение значения текущей активной папки и переход к другой папке.
RD Удаление папки.
RECOVER Восстановление читаемой информации с плохого или поврежденного диска.
REM Помещение комментариев в пакетные файлы и файл CONFIG.SYS.
REN Переименование файлов и папок.
RENAME Переименование файлов и папок.
REPLACE Замещение файлов.
RMDIR Удаление папки.
SET Вывод, установка и удаление переменных среды Windows.
SETLOCAL Начало локальных изменений среды для пакетного файла.
SHIFT Изменение содержимого (сдвиг) подставляемых параметров для пакетного
файла.
SORT Сортировка ввода.
START Запуск программы или команды в отдельном окне.
SUBST С
Цикл FOR
tokens - данный параметр командной стоки цикла for cmd позволяет указать, какие номера полей строки, полученных из заданного текста, нужно передать для обработки в цикл. Полученные поля будут храниться в отдельной переменной. Фактически, если принимать каждое слово строки как отдельный элемент, то параметр tokens позволяет указать, какие именно слова по счету нужно обработать. Как упоминалось выше, стандартным разделителем является пробел и табуляция. Для дополнительной переменной, как и для переменной инициализации, в качестве имени указывается латинская буква, большая или маленькая. Значения можно указывать как через запятые, например, “tokens=1,4, 9” – первый, четвертый и девятый элемент, так и через диапазон, например, “tokens=4-11” – с четвертого по одиннадцатый. Можно комбинировать: “tokens=4-10,15,20” – с четвертого по десятый, а также, пятнадцатый и двадцатый элемент. Если мы укажем в качестве последнего значения звездочку, то создастся еще одна переменная, которая будет хранить в себе все остальные элементы (строки) текста.
delims – параметр позволяет задать дополнительные разделители строки на подстроки. Так, стандартными разделителями является пробел и символ табуляции. Например, “delims=,.:” – тут мы определили, что запятые, точки и двоеточия являются разделителями.
Skip - позволяет в цикле cmd for задать количество строк, которые нужно пропустить, счет идет с начала файла, например
eol – позволяет задать признак концевого комментария Весь текст, что будет находиться после него, будет приниматься за комментарий
%~tI - переменная %I расширяется до даты /времени файла
EQU - равно, идентично оператору ==
NEQ - не равно
LSS - меньше, чем
LEQ - меньше или равно
GTR - больше, чем
GEQ - больше или равно
а ключ /I, если он указан, задает сравнение текстовых строк без учета регистра
команда1 & команда2 — Используется для разделения нескольких команд в одной командной строке. В cmd.exe выполняется первая команда, затем вторая команда.
команда1 && команда2 — Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.
команда1 || команда2 — Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).
AT Выполнение команд и запуск программ по расписанию.
ATTRIB Отображение и изменение атрибутов файлов.
BREAK Включение/выключение режима обработки комбинации клавиш CTRL+C.
CACLS Отображение/редактирование списков управления доступом (ACL) к файлам.
CALL Вызов одного пакетного файла из другого.
CD Вывод имени либо смена текущей папки.
CHCP Вывод либо установка активной кодовой страницы.
CHDIR Вывод имени либо смена текущей папки.
CHKDSK Проверка диска и вывод статистики.
CHKNTFS Отображение или изменение выполнения проверки диска во время загрузки.
CLS Очистка экрана.
CMD Запуск еще одного интерпретатора командных строк Windows.
COLOR Установка цвета текста и фона, используемых по умолчанию.
COMP Сравнение содержимого двух файлов или двух наборов файлов.
COMPACT Отображение/изменение сжатия файлов в разделах NTFS.
CONVERT Преобразование дисковых томов FAT в NTFS. Нельзя выполнить
преобразование текущего активного диска.
COPY Копирование одного или нескольких файлов в другое место.
DATE Вывод либо установка текущей даты.
DEL Удаление одного или нескольких файлов.
DIR Вывод списка файлов и подпапок из указанной папки.
DISKCOMP Сравнение содержимого двух гибких дисков.
DISKCOPY Копирование содержимого одного гибкого диска на другой.
DOSKEY Редактирование и повторный вызов командных строк; создание макросов.
ECHO Вывод сообщений и переключение режима отображения команд на экране.
ENDLOCAL Конец локальных изменений среды для пакетного файла.
ERASE Удаление одного или нескольких файлов.
EXIT Завершение работы программы CMD.EXE (интерпретатора командных строк) .
FC Сравнение двух файлов или двух наборов файлов и вывод различий между
ними.
FIND Поиск текстовой строки в одном или нескольких файлах.
FINDSTR Поиск строк в файлах.
FOR Запуск указанной команды для каждого из файлов в наборе.
FORMAT Форматирование диска для работы с Windows.
FTYPE Вывод либо изменение типов файлов, используемых при сопоставлении по
расширениям имен файлов.
GOTO Передача управления в отмеченную строку пакетного файла.
GRAFTABL Позволяет Windows отображать расширенный набор символов в графическом
режиме.
HELP Выводит справочную информацию о командах Windows.
IF Оператор условного выполнения команд в пакетном файле.
LABEL Создание, изменение и удаление меток тома для дисков.
MD Создание папки.
MKDIR Создание папки.
MODE Конфигурирование системных устройств.
MORE Последовательный вывод данных по частям размером в один экран.
MOVE Перемещение одного или нескольких файлов из одной папки в другую.
PATH Вывод либо установка пути поиска исполняемых файлов.
PAUSE Приостановка выполнения пакетного файла и вывод сообщения.
POPD Восстановление предыдущего значения текущей активной папки,
сохраненного с помощью команды PUSHD.
PRINT Вывод на печать содержимого текстовых файлов.
PROMPT Изменение приглашения в командной строке Windows.
PUSHD Сохранение значения текущей активной папки и переход к другой папке.
RD Удаление папки.
RECOVER Восстановление читаемой информации с плохого или поврежденного диска.
REM Помещение комментариев в пакетные файлы и файл CONFIG.SYS.
REN Переименование файлов и папок.
RENAME Переименование файлов и папок.
REPLACE Замещение файлов.
RMDIR Удаление папки.
SET Вывод, установка и удаление переменных среды Windows.
SETLOCAL Начало локальных изменений среды для пакетного файла.
SHIFT Изменение содержимого (сдвиг) подставляемых параметров для пакетного
файла.
SORT Сортировка ввода.
START Запуск программы или команды в отдельном окне.
SUBST С
Команда DIR
Показать
Команда 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 "*"
Формат командной строки:
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 "*"
tokens - данный параметр командной стоки цикла for cmd позволяет указать, какие номера полей строки, полученных из заданного текста, нужно передать для обработки в цикл. Полученные поля будут храниться в отдельной переменной. Фактически, если принимать каждое слово строки как отдельный элемент, то параметр tokens позволяет указать, какие именно слова по счету нужно обработать. Как упоминалось выше, стандартным разделителем является пробел и табуляция. Для дополнительной переменной, как и для переменной инициализации, в качестве имени указывается латинская буква, большая или маленькая. Значения можно указывать как через запятые, например, “tokens=1,4, 9” – первый, четвертый и девятый элемент, так и через диапазон, например, “tokens=4-11” – с четвертого по одиннадцатый. Можно комбинировать: “tokens=4-10,15,20” – с четвертого по десятый, а также, пятнадцатый и двадцатый элемент. Если мы укажем в качестве последнего значения звездочку, то создастся еще одна переменная, которая будет хранить в себе все остальные элементы (строки) текста.
delims – параметр позволяет задать дополнительные разделители строки на подстроки. Так, стандартными разделителями является пробел и символ табуляции. Например, “delims=,.:” – тут мы определили, что запятые, точки и двоеточия являются разделителями.
Skip - позволяет в цикле cmd for задать количество строк, которые нужно пропустить, счет идет с начала файла, например
eol – позволяет задать признак концевого комментария Весь текст, что будет находиться после него, будет приниматься за комментарий
%~tI - переменная %I расширяется до даты /времени файла
EQU - равно, идентично оператору ==
NEQ - не равно
LSS - меньше, чем
LEQ - меньше или равно
GTR - больше, чем
GEQ - больше или равно
а ключ /I, если он указан, задает сравнение текстовых строк без учета регистра
команда1 & команда2 — Используется для разделения нескольких команд в одной командной строке. В cmd.exe выполняется первая команда, затем вторая команда.
команда1 && команда2 — Запускает команду, стоящую за символом &&, только если команда, стоящая перед этим символом была выполнена успешно. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая была выполнена успешно.
команда1 || команда2 — Запускает команду, стоящую за символом ||, только если команда, стоящая перед символом || не была выполнена. В cmd.exe выполняется первая команда. Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).
получение день неделя месяц и тп
Показать
@Echo Off
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Day') Do Set $Day=%%i&GoTo Day
:Day
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Month') Do Set $Month=%%i&GoTo Month
:Month
For /F "Tokens=%$Month% Delims=," %%i In ("Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь") Do Set $MonthName=%%i
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Year') Do Set $Year=%%i&GoTo Year
:Year
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get DayOfWeek') Do Set /A $DayOfWeek=%%i+1&GoTo DayOfWeek
:DayOfWeek
For /F "Tokens=%$DayOfWeek% Delims=," %%i In ("Воскресенье,Понедельник,Вторник,Среда,Четверг,Пятница,Суббота") Do Set $DayOfWeekName=%%i
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get WeekInMonth') Do Set $WeekInMonth=%%i&GoTo WeekInMonth
:WeekInMonth
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Hour') Do Set $Hour=%%i&GoTo Hour
:Hour
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Minute') Do Set $Minute=%%i&GoTo Minute
:Minute
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Second') Do Set $Second=%%i&GoTo Second
:Second
Echo --------------------------------------
Echo День : %$Day%
Echo Месяц : %$MonthName% (%$Month%-й месяц года)
Echo Год : %$Year%
Echo --------------------------------------
Echo День недели : %$DayOfWeekName% (%$DayOfWeek%-й день недели)
Echo Неделя месяца: %$WeekInMonth%
Echo --------------------------------------
Echo Часов : %$Hour%
Echo Минут : %$Minute%
Echo Секунд : %$Second%
Echo --------------------------------------
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Day') Do Set $Day=%%i&GoTo Day
:Day
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Month') Do Set $Month=%%i&GoTo Month
:Month
For /F "Tokens=%$Month% Delims=," %%i In ("Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь") Do Set $MonthName=%%i
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Year') Do Set $Year=%%i&GoTo Year
:Year
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get DayOfWeek') Do Set /A $DayOfWeek=%%i+1&GoTo DayOfWeek
:DayOfWeek
For /F "Tokens=%$DayOfWeek% Delims=," %%i In ("Воскресенье,Понедельник,Вторник,Среда,Четверг,Пятница,Суббота") Do Set $DayOfWeekName=%%i
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get WeekInMonth') Do Set $WeekInMonth=%%i&GoTo WeekInMonth
:WeekInMonth
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Hour') Do Set $Hour=%%i&GoTo Hour
:Hour
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Minute') Do Set $Minute=%%i&GoTo Minute
:Minute
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Second') Do Set $Second=%%i&GoTo Second
:Second
Echo --------------------------------------
Echo День : %$Day%
Echo Месяц : %$MonthName% (%$Month%-й месяц года)
Echo Год : %$Year%
Echo --------------------------------------
Echo День недели : %$DayOfWeekName% (%$DayOfWeek%-й день недели)
Echo Неделя месяца: %$WeekInMonth%
Echo --------------------------------------
Echo Часов : %$Hour%
Echo Минут : %$Minute%
Echo Секунд : %$Second%
Echo --------------------------------------
Скрипт минус день с учтетом месяца года
Показать
:: Скрипт минус 1 день
setlocal enabledelayedexpansion
::День
set d=%date:~0,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%date:~6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:~0,1%==0 set d=%d:~1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:~0,1%==0 set m=%m:~1%
:: Определение кл-ва дней в феврале высокосный год или нет от 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%.%m:~-2%.%y%
::Конец скрипта минус 1 день
setlocal DISABLEDELAYEDEXPANSION
setlocal enabledelayedexpansion
::День
set d=%date:~0,2%
::Месяц
set m=%date:~3,2%
::Год
set y=%date:~6,4%
:: День Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если дата 01 то будет 1
if %d:~0,1%==0 set d=%d:~1%
:: Месяц Оставить одно первое значение числа если 0 =0 то выполнить оставить одно значение справа т .е если месяц 02 то будет 2
if %m:~0,1%==0 set m=%m:~1%
:: Определение кл-ва дней в феврале высокосный год или нет от 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%.%m:~-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
и так по кругу и узнаем високосный год))