r4zoom
20-12-2013, 19:43
Нужна помощь с пакетными файлами, хочу настроить сложную (как мне кажется, или просто сложную для моего уровня) систему резервного копирования данных (базы 1С).
на локальном компьютере есть 4 папки:
hour
day
month
year
в папке "hour" есть папки с часом когда запускается батник (08, 10, 12, и т.д.)
в папке "day" 31 папка соответственно дню месяца
в папке "month" 12 папок на каждый месяц
в папке "year" папки соответствующие году
с батниками которые архивируют, переименовывают(ЧЧММ_ДДММГГГГ.rar) и копируют каждые 2 часа я вроде как справился.
Пример батника на 16 часов
rem Назначение переменной FileName даты и времени
For /F "Delims=." %%I In ('WMIC.exe OS Get LocalDateTime ^| Find "."') Do Set DT=%%I
set FileName=1CBK_1600_%DT:~6,2%%DT:~4,2%%DT:~0,4%
set timedate=16:00 %DT:~6,2%.%DT:~4,2%.%DT:~0,4%
if exist "D:\a\KDUNF8" GOTO step1
if not exist "D:\a\KDUNF8" GOTO error1
:step1
rem Архивирование и переименование
D:\rar\Rar.exe a "D:\b\%FileName%.rar" "D:\a\KDUNF8"
if exist "D:\b\%FileName%.rar" GOTO step2
if not exist "D:\b\%FileName%.rar" GOTO error2
:step2
rem Копирование нужного файла
copy "D:\b\%FileName%.rar" "D:\b\1_hour\16\%FileName%.rar"
if exist "D:\b\1_hour\16\%FileName%.rar" GOTO step3
if not exist "D:\b\1_hour\16\%FileName%.rar" GOTO error3
:step3
rem запись лога
del /S /Q "D:\b\%FileName%.rar"
echo %timedate% Успешно Файл %FileName%.rar успешно создан и копирован >> "D:\a\result.log"
exit
:error1
echo %timedate% Ошибка Не найдена база KDUNF8>> "D:\a\result.log"
exit
:error2
echo %timedate% Ошибка Папка %FileName% не заархивирована>> "D:\a\result.log"
exit
:error3
echo %timedate% Ошибка Файл %FileName% не скопирован>> "D:\a\result.log"
exit
Собственно сам вопрос:
Нужно чтобы вечером после 22:00 каждого дня батник копировал нужную базу в нужный день папки Day, т.е. как я себе это представляю
условие: если в папке .../hour/22 есть архив созданный сегодня то нужно его скопировать в папку day сегодняшнего дня (удалив архив прошлого месяца) , если там его нет (вдруг свет маргнул), то тоже самое проверить в папке .../hour/20 и т.д. И если и в папке .../hour/08 тоже не нашел (вдруг целый день света небыло), то написать в логах, что нет архива за этот день
соответственно раз в месяц тоже самое проделывать. Допустим в феврале 28 дней, значит в папках 29,30 и 31 будут январские копии, нужно чтобы батник сравнил текущий месяц и месяц создания архива в папке .../day/31, выяснил что месяц прошлый, и залез в .../day/30. и так далее пока не найдет архив этого месяца и положит его в папку ...month/02 (ну или соответствующего месяца).
и по аналогии с папкой year
Буду очень признателен. Заранее спасибо
на локальном компьютере есть 4 папки:
hour
day
month
year
в папке "hour" есть папки с часом когда запускается батник (08, 10, 12, и т.д.)
в папке "day" 31 папка соответственно дню месяца
в папке "month" 12 папок на каждый месяц
в папке "year" папки соответствующие году
с батниками которые архивируют, переименовывают(ЧЧММ_ДДММГГГГ.rar) и копируют каждые 2 часа я вроде как справился.
Пример батника на 16 часов
rem Назначение переменной FileName даты и времени
For /F "Delims=." %%I In ('WMIC.exe OS Get LocalDateTime ^| Find "."') Do Set DT=%%I
set FileName=1CBK_1600_%DT:~6,2%%DT:~4,2%%DT:~0,4%
set timedate=16:00 %DT:~6,2%.%DT:~4,2%.%DT:~0,4%
if exist "D:\a\KDUNF8" GOTO step1
if not exist "D:\a\KDUNF8" GOTO error1
:step1
rem Архивирование и переименование
D:\rar\Rar.exe a "D:\b\%FileName%.rar" "D:\a\KDUNF8"
if exist "D:\b\%FileName%.rar" GOTO step2
if not exist "D:\b\%FileName%.rar" GOTO error2
:step2
rem Копирование нужного файла
copy "D:\b\%FileName%.rar" "D:\b\1_hour\16\%FileName%.rar"
if exist "D:\b\1_hour\16\%FileName%.rar" GOTO step3
if not exist "D:\b\1_hour\16\%FileName%.rar" GOTO error3
:step3
rem запись лога
del /S /Q "D:\b\%FileName%.rar"
echo %timedate% Успешно Файл %FileName%.rar успешно создан и копирован >> "D:\a\result.log"
exit
:error1
echo %timedate% Ошибка Не найдена база KDUNF8>> "D:\a\result.log"
exit
:error2
echo %timedate% Ошибка Папка %FileName% не заархивирована>> "D:\a\result.log"
exit
:error3
echo %timedate% Ошибка Файл %FileName% не скопирован>> "D:\a\result.log"
exit
Собственно сам вопрос:
Нужно чтобы вечером после 22:00 каждого дня батник копировал нужную базу в нужный день папки Day, т.е. как я себе это представляю
условие: если в папке .../hour/22 есть архив созданный сегодня то нужно его скопировать в папку day сегодняшнего дня (удалив архив прошлого месяца) , если там его нет (вдруг свет маргнул), то тоже самое проверить в папке .../hour/20 и т.д. И если и в папке .../hour/08 тоже не нашел (вдруг целый день света небыло), то написать в логах, что нет архива за этот день
соответственно раз в месяц тоже самое проделывать. Допустим в феврале 28 дней, значит в папках 29,30 и 31 будут январские копии, нужно чтобы батник сравнил текущий месяц и месяц создания архива в папке .../day/31, выяснил что месяц прошлый, и залез в .../day/30. и так далее пока не найдет архив этого месяца и положит его в папку ...month/02 (ну или соответствующего месяца).
и по аналогии с папкой year
Буду очень признателен. Заранее спасибо