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

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

mouserok 12-10-2011 18:30 1771948

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

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

Foreigner 12-10-2011 20:02 1771995

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


Iska 12-10-2011 20:23 1772005

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

mouserok 13-10-2011 09:32 1772259

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

mouserok 13-10-2011 14:02 1772455

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

2011.10.13___*

mouserok 13-10-2011 15:35 1772503

получилось
проверяет нет ли ошибок в логе
затем генерятся дата и ищется
Код:

@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



Время: 16:40.

Время: 16:40.
© OSzone.net 2001-