Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Условия bat файлом - проверить день и месяц создания (http://forum.oszone.net/showthread.php?t=274382)

r4zoom 20-12-2013 19:43 2275797

Условия bat файлом - проверить день и месяц создания
 
Нужна помощь с пакетными файлами, хочу настроить сложную (как мне кажется, или просто сложную для моего уровня) систему резервного копирования данных (базы 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

Буду очень признателен. Заранее спасибо

Molchune 22-12-2013 13:40 2276709

Только у меня создается что, как то сильно усложнили процедуру бэкапов.
Цитата:

Цитата r4zoom
в папке "hour" есть папки с часом когда запускается батник (08, 10, 12, и т.д.) »

почему нельзя сделать одно задание с повтором каждые два часа?

Цитата:

Цитата r4zoom
Нужно чтобы вечером после 22:00 каждого дня батник копировал нужную базу в нужный день папки Day, т.е. как я себе это представляю
условие: если в папке .../hour/22 есть архив созданный сегодня то нужно его скопировать в папку day сегодняшнего дня (удалив архив прошлого месяца) , если там его нет (вдруг свет маргнул), то тоже самое проверить в папке .../hour/20 и т.д. И если и в папке .../hour/08 тоже не нашел (вдруг целый день света небыло), то написать в логах, что нет архива за этот день »

Почему просто нельзя скриптом создать папку таким именем 2013_Март_25_14.00?
Насчет
Цитата:

Цитата r4zoom
то написать в логах, что нет архива за этот день »

В принципе если нет файла, и так понятно что нет архива за этот день. от того что у вас там будет написано "Нет архива" толку мне кажется немного.

Ну и напоследок. вот пример на PS.
читать дальше »
Код:

$source="D:\tmp\Test\1C\"
$destination="D:\tmp\Test\Backup"
$Time=Get-Date -UFormat "%Y_%m_%d_%H.%M"
$timex = get-date
$timex = $timex.AddDays(-31)
set-alias sevenZip "C:\Program Files\7-Zip\7za.exe"
New-Item -Type "Directory" -Path $destination\$Time
sevenZip a -t7z  $destination\$Time\1c.7z -ssw $source
dir $destination | where {$_.lastwritetime -le $timex} | del -Recurse -force



Делает бэкап папки в папку с именем "YYYY_mm_dd_HH.MM"
И удаляет все с датой последнего изменения свыше 31 день.

Iska 23-12-2013 00:45 2277067

Цитата:

Цитата Molchune
Только у меня создается что, как то сильно усложнили процедуру бэкапов. »

Не только у Вас.


Время: 04:53.

Время: 04:53.
© OSzone.net 2001-