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

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

kddkda 29-06-2018 09:37 2819973

Выгрузка по рабочим дням
 
Добрый день.

Есть такая задача выгружать архив клиентов на FTP, 15 и 30 числа, но если эти дни приходятся на праздник или выходной то выгружаем ранее.
Bat файл выгрузки мной уже написан, а вот не могу сообразить как написать проверку, помогите пожалуйста. Хочется автоматизировать эту задачу.
Также хочется чтобы была проверка по файлу в котором указаны праздничные дни, и если праздники то выгрузить ранее.
Также есть проблема с Февралем там 28 дней, то есть выгрузка 28 или ранее, если попадает выходной на 28.

Пример:
Сегодня 28 число, Пятница, 30 число попадает на Воскресение, но нужно выгрузить сегодня.

Взял код из темы "CMD/BAT - [решено] Переменная Дня недели" все хорошо но не соображу какой алгоритм проверки сделать, подскажите кто чем может.

megaloman 29-06-2018 10:51 2819985

kddkda, С выходными - задача решаемая. (кстати - что такое "выходной" - только воскресенье?) Но насчёт праздников ... Не знаю, какие у Вас законы, но у нас частенько перед праздниками практикуется перенос рабочих дней, чтобы увеличить число нерабочих дней вподряд (тут уж понятие "выходные" может извращаться как угодно). У нас есть такой праздник -Пасха, а за ним и Радуница(у нас нерабочий день), который в каждом году приходится на свой день.
ИМХО, решение задачи - задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать.
Либо изменить постановку задачи: 1 и 15 (или 14) число есть всегда.
Логика 1 числа: если нет архива текущего месяца - сделать его.
Логика 15 числа: если за текущий месяц нет архива за число >= 15, делаем его.
Наверное, в этом случае на каждую выгрузку надо будет создать лог-файл с именем по дате выгрузки.

Выбирайте, что Вас устроит, можно затем предлагать код командного файла.

tiss42rus 29-06-2018 11:42 2819994

Цитата:

Цитата megaloman
задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать. »

+добавить напоминалку о том что год заканчивается надо батник изменить

alpap 29-06-2018 13:21 2820000

Цитата:

Цитата tiss42rus
надо батник изменить »

скорее файл txt-список дат, запуск перед концом года задачей из планировщика.

Elven 29-06-2018 16:18 2820027

Цитата:

Цитата megaloman
задать в батнике на год (или более) расписание дней, когда надо чего-то там делать, и ежедневно в планировщике заданий этот батник запускать. »

А больше чем на год и не получится. Учитывая количество праздников, которые нужно учесть, переносы рабочих дней, которые меняются год от года. Даже на год затруднительно будет составить, но это еще худо-бедно возможно. Как шаг к упрощению ежегодной работы - список дней запуска (или список выходных, что нелогично ибо их будет сильно больше) хранить не в самом батнике, а в отдельном файле, и редактировать уже его.
Вариант проверки при таком раскладе будет, к примеру, таким:

файл с датами запуска.txt
Код:

01.01.2018
15.01.2018
01.02.2018
15.02.2018


проверка
Код:

findstr %date% "файл с датами запуска.txt" && (
echo выполняем какие-то действия) || (
echo не выполняем ничего)


megaloman 29-06-2018 18:08 2820035

Вот батник с расписанием. Меня напрягает, если батник будет ссылаться на какой-то текстовый файл. Этот батник можно таскать куда угодно, не задумываясь о сопутствующем файле
Код:

@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, чтобы не задумываться о выбранном формате даты в системе

kddkda 06-07-2018 07:28 2820808

Доброе Утро.

Спасибо за ответы, извиняюсь что долго не отвечал.

Мысль такая появилась, проверяем ТДата +1, если выходной (Суббота или Воскресенье) или праздник, то выгрузить сегодня.
Так как все государственные праздники известны то их можно забить один раз, а вот дни переноса праздничных можно заполнять через внешний TXT файл в начале года так как все переносы проходят через официальные документы в начале года.

megaloman, спасибо за код.

Рабочий вариант выложу тут в теме, надеюсь найду время за выходные.


Время: 23:08.

Время: 23:08.
© OSzone.net 2001-