Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - если дата в логе старше 7 дней отписать новую

Ответить
Настройки темы
CMD/BAT - если дата в логе старше 7 дней отписать новую

Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


для бекапа использую батник в котором много блоков
несколько из них требуют чтоб запуск был не чаше 1 раз в неделю

как проверить что если дата в логе старше 7 дней, тогда выполнить другое действие ???

Отправлено: 18:30, 12-10-2011

 

Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


mouserok,
Вот, можешь попытаться прикрутить. Но лучше все-таки *.ps1 или *.vbs
Код: Выделить весь код
:: Разница между датами в днях
@echo off
setlocal

:again
set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%

if %d:~0,1%==0 set d=%d:~1%
if %m:~0,1%==0 set m=%m:~1%

set /a feb=y%%4
if %feb%==0 (set feb=29) else (set feb=28)

set /a m-=1
if %m%==0 (set yd=0 && goto:skip)

:tok
set /a tok+=1
for /f "tokens=%tok%" %%i in ("31 %feb% 31 30 31 30 31 31 30 31 30 31") do (
    set /a yd+=%%i
    if not %tok%==%m% goto:tok
)

:skip
set /a res=y*365+y/4+29-feb+yd+d
set tok=
set yd=

if not defined res1 (
    set res1=%res%
    set /p date="Enter date: "
    goto:again
)

set /a res-=res1
if not %res%==0 (
    if %res:~0,1%==- (
        echo %res:~1% days from %date%
    ) else (
        echo %res% days to %date%
    )
) else (
    echo today is %date%
)
Если лог состоит из дат, одна строчка - одна дата, то на поше может выглядеть так:
Код: Выделить весь код
$date = gc test.log
if ((new-timespan $date[$date.count-1] $(get-date)).days -ge 7) {cmd /c 1.cmd}
Или передавать кол-во дней в качестве параметра в батник:
Код: Выделить весь код
$date = gc test.log
$days = (new-timespan $date[$date.count-1] $(get-date)).days
cmd /c 1.cmd $days

Последний раз редактировалось Foreigner, 12-10-2011 в 20:42.


Отправлено: 20:02, 12-10-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


mouserok, мало информации для ответа.

Отправлено: 20:23, 12-10-2011 | #3


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


фига се ... я даже не знаю что с этим делать
вообще батник делает бэкап ... и в конце отписывает дату отработки YYYY.MM.DD
вот по этой дате нужно сверить с текущей

Отправлено: 09:32, 13-10-2011 | #4


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


Foreigner,
как выцепить в переменую из файла
дата в формате строкой
Код: Выделить весь код
2011.10.13___*

Отправлено: 14:02, 13-10-2011 | #5


Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить PM | Цитировать


получилось
проверяет нет ли ошибок в логе
затем генерятся дата и ищется
Код: Выделить весь код
@echo off
findstr /m /C:"___BAD" test.log>nul
SET error=%errorlevel%
IF %error% NEQ 1 (echo exit&goto :EOF) else (echo NEXT)
SET finded=1
FOR /F %%a IN (days.lst) DO call 4.bat %%a
IF %finded% NEQ 1 (echo finded) else (echo.)
Код: Выделить весь код
@echo off
SET count_day_off=%1
for /f "skip=2 tokens=2*" %%i in ('reg QUERY "HKCU\Control Panel\International" /v sDate') do set sdate=%%j
for /f "delims=%sdate% tokens=1,2,3" %%i in ("%DATE%") do call :getpackage %%i %%j %%k
 
:: проверочка
rem echo %year%
rem echo %month%
rem echo %day%
rem echo %package%
findstr /m /C:"%package%___" test.log>nul
SET error=%errorlevel%
IF %error% NEQ 1 (SET finded=0&GOTO :EOF)

 
 
:: тут можно поместить необходимые нам команды
 
goto :EOF
 
:getpackage
set day=%1
set month=%2
set /a year=%3
set lastdays="31 28 31 30 31 30 31 31 30 31 30 31"
if %day% leq 9 set /a day=%day:~-1%
if %month% leq 9 set /a month=%month:~-1%
set /a day-=%count_day_off%
if "%day%"=="0" set /a month-=1
if "%month%"=="0" set /a month=12,year-=1
set /a isleap="(year%%4)&((year%%100)|(year%%400))"
if "%isleap%"=="0" set lastdays=%lastdays:28=29%
if "%day%"=="0" for /f "tokens=%month%" %%i in (%lastdays%) do set day=%%i
if %day% leq 9 set day=0%day%
if %month% leq 9 set month=0%month%
set package=%year%.%month%.%day%
rem set package=%year%-%month%-%day%
goto :EOF

Код: Выделить весь код
1
2
3
4
5
6
7

Отправлено: 15:35, 13-10-2011 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - если дата в логе старше 7 дней отписать новую

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Нужно удалить лог файлы старше 30 дней ksv_sergo Скриптовые языки администрирования Windows 14 24-03-2016 15:02
Любой язык - Удаление файлов старше 5 дней кроме указанного по имени. Joni Скриптовые языки администрирования Windows 6 11-07-2012 11:18
[решено] Автоочистка файлов, старше 5 дней. Universal_gr Программное обеспечение Linux и FreeBSD 1 01-10-2010 01:12
[решено] не могу в ЛС человеку отписать harleysoft О сайте и форуме 2 27-08-2010 14:10
Прочее - удаление файлов старше 10 дней admin666 Общий по Linux 1 23-07-2009 19:09




 
Переход