Книга знаний

Инф. технологии / Администрирование

Пример bat-файла в обслуживании backup файлов

Приведён пример небольшого bat-файла производящего разбор имени файла и удаление не нужных backup-файловАвтор статьи: Ковычки
Последняя редакция №1 от 09.09.10
URL: http://kb.mista.ru/article.php?id=807

Ключевые слова: 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

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика