Пример bat-файла в обслуживании backup файлов Ключевые слова: bat-файл, shell, backup, MS SQL
стояла задача "по быстрому" повесить в планировщик заданий процедуру, которая чистит ненужные backup-файлы получаемые при архивировании базы 1С посредством встроенных механизмов MS SQL. Хотя в принципе таким образом можно решать весьма широкий спектр задач.
Напомню, что штатный backup у меня создаёт файлы в формате
ИмяБазы_backup_ГГГГ_ММ_ДД_ЧЧМинСЕК.bak
где
ИмяБазы - имя базы, которую архивировали
ГГГГ - 4 цифры года (например 2010)
ММ - 2 цифры месяца (например 03 - март, 11 - ноябрь)
ДД - 2 цифры дня (01, 13, 29)
ЧЧМинСек - время архивации (например - 202808 это 20 часов, 28 минут, 08 сек)
В данном примере я удаляю все backup-файлы относящиеся к позапрошлому месяцу. Поэтому у меня в самом худшем варианте есть ежеденевные backup-файлы как минимум на каждый день прошлого месяца
Итак. Содержимое bat-файла primer.bat
ECHO off
rem получаем первую цифру текущего месяца (тут вариантов 2 или "1" или "0")
rem это необходимо из-за синтаксиса встроенного shell Windows, который воспринимает
rem лидирующий 0 как указатель на восьмеричную систему счисления в которой нет чисел "8" и "9"
Set var1=%date:~3,-6%
IF %var1% GTR 0 GOTO L2
rem лидирующей цифрой у номера текущего месяца является "1" значит сейчас
rem либо октябрь либо ноябрь либо декабрь. Заполняем переменную %VMounth% номером месяца
Set VMounth=%date:~4,-5%
rem делаем проверку, а не является ли текущий месяц январём или февралём
IF %VMounth% GTR 2 GOTO L1
rem если текущий месяц январь или февраль, то формируем маску, для удаления файлов
rem относящихся соответственно к ноябрю или декабрю прошлого года
Set /a VMounth=%VMounth% + 10
Set /a VYar=%date:~6% - 1
Set VName=backup_%VYar%_%VMounth%
GOTO L3
:L1
rem текущий месяц позже февраля, но раньше октября - формируем соответствующую маску
rem для удаления не нужных файлов
Set /a VMounth=%VMounth% - 2
Set VYar=%date:~6%
Set VName=backup_%VYar%_0%VMounth%
GOTO L3
:L2
rem текущий месяц октябрь, ноябрь или декабрь - формируем соответствующую маску
rem для удаления не нужных файлов
Set /a VMounth=%date:~3,-5% - 2
Set VYar=%date:~6%
Set VName=backup_%VYar%_%VMounth%
:L3
rem производим удаление не нужного по маске
del *%VName%*.Bak
Если в процессе отладке нам нужно будет проверить как работает алгоритм, то в нужное место можно вставить отладочные
echo %VMounth%
echo %VYar%
echo %VName%
--------------------------
По поводу лидирующих нулей
set /a 1%date:~3,2% - 100 |