Показать полную графическую версию : Выгрузка по рабочим дням
Добрый день.
Есть такая задача выгружать архив клиентов на FTP, 15 и 30 числа, но если эти дни приходятся на праздник или выходной то выгружаем ранее.
Bat файл выгрузки мной уже написан, а вот не могу сообразить как написать проверку, помогите пожалуйста. Хочется автоматизировать эту задачу.
Также хочется чтобы была проверка по файлу в котором указаны праздничные дни, и если праздники то выгрузить ранее.
Также есть проблема с Февралем там 28 дней, то есть выгрузка 28 или ранее, если попадает выходной на 28.
Пример:
Сегодня 28 число, Пятница, 30 число попадает на Воскресение, но нужно выгрузить сегодня.
Взял код из темы "CMD/BAT - [решено] Переменная Дня недели" все хорошо но не соображу какой алгоритм проверки сделать, подскажите кто чем может.
megaloman
29-06-2018, 10:51
kddkda, С выходными - задача решаемая. (кстати - что такое "выходной" - только воскресенье?) Но насчёт праздников ... Не знаю, какие у Вас законы, но у нас частенько перед праздниками практикуется перенос рабочих дней, чтобы увеличить число нерабочих дней вподряд (тут уж понятие "выходные" может извращаться как угодно). У нас есть такой праздник -Пасха, а за ним и Радуница(у нас нерабочий день), который в каждом году приходится на свой день.
ИМХО, решение задачи - задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать.
Либо изменить постановку задачи: 1 и 15 (или 14) число есть всегда.
Логика 1 числа: если нет архива текущего месяца - сделать его.
Логика 15 числа: если за текущий месяц нет архива за число >= 15, делаем его.
Наверное, в этом случае на каждую выгрузку надо будет создать лог-файл с именем по дате выгрузки.
Выбирайте, что Вас устроит, можно затем предлагать код командного файла.
tiss42rus
29-06-2018, 11:42
задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать. »
+добавить напоминалку о том что год заканчивается надо батник изменить
надо батник изменить »
скорее файл txt-список дат, запуск перед концом года задачей из планировщика.
задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать. »
А больше чем на год и не получится. Учитывая количество праздников, которые нужно учесть, переносы рабочих дней, которые меняются год от года. Даже на год затруднительно будет составить, но это еще худо-бедно возможно. Как шаг к упрощению ежегодной работы - список дней запуска (или список выходных, что нелогично ибо их будет сильно больше) хранить не в самом батнике, а в отдельном файле, и редактировать уже его.
Вариант проверки при таком раскладе будет, к примеру, таким:
01.01.2018
15.01.2018
01.02.2018
15.02.2018
findstr %date% "файл с датами запуска.txt" && (
echo выполняем какие-то действия) || (
echo не выполняем ничего)
megaloman
29-06-2018, 18:08
@Echo Off
cls
rem 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12
Set Schedule=20180115 20180131 20180215 20180228 20180315 20180330 20180413 20180430 20180515 20180531 20180615 20180629 20180715 20180730 20180815 20180831 20180914 20180928 20181015 20181030 20181115 20181130 20181214 20181228
Set /A Log=-1
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
FOR %%i IN (%Schedule%) DO Set "MPlan=%%i" &Call :Logic %%@Tdate:~0,8%% %%@Tdate:~0,6%% %%i %%MPlan:~0,6%%
If %Log% EQU 0 Echo Nothing to do &Exit /B 0
If %Log% EQU -1 Call :ErrorDo %@Tdate:~0,6%% &Exit /B 1
If %Log% EQU 1 Call :UpLoad
Exit /B 0
:Logic
If %Log% LEQ 0 If %2==%4 Set /A Log=0
If %1==%3 Set /A Log=1
GoTo :Eof
:ErrorDo
Echo No scheduled for this month %1
Pause
GoTo :Eof
:UpLoad
Echo Upload backup
GoTo :EofЕсли за текущий месяц нет плана выгрузки, вызывается процедура :ErrorDo для аварийного сообщения. Сейчас там банальное Echo, хотя можно придумать способ оповещения по сети или через E-Mail
Если надо сделать выгрузку, можно её вставить в процедуру :UpLoad, сейчас там просто Echo
Для получения текущей даты применил WMIC, чтобы не задумываться о выбранном формате даты в системе
Доброе Утро.
Спасибо за ответы, извиняюсь что долго не отвечал.
Мысль такая появилась, проверяем ТДата +1, если выходной (Суббота или Воскресенье) или праздник, то выгрузить сегодня.
Так как все государственные праздники известны то их можно забить один раз, а вот дни переноса праздничных можно заполнять через внешний TXT файл в начале года так как все переносы проходят через официальные документы в начале года.
megaloman, спасибо за код.
Рабочий вариант выложу тут в теме, надеюсь найду время за выходные.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC