Компьютерный форум 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=236688)

havenofear 15-06-2012 08:16 1934531

Проверка времени создания файла
 
Доброго времени суток. В Удостоверяющем центре каждый день выпускается список отзыва, необходимо проверять выпустился он или нет, то есть - если определённый файл в определённой папке был создан больше чем 24 часа 35 минут назад - произвести действие - например отправить письмо. Можнос делать запланированное задание, которое выполняется раз в 30 минут, т.к. перенос этого файла происходит тоже раз в 30 минут.

CyberMuesli 17-06-2012 01:06 1935564

Код:

@echo off

:demo
setlocal enabledelayedexpansion

call :LastFileByDate "%windir%"
call :FileInfo "!LastFileByDate!" BadCertificateList
call :DisplayFileInfo BadCertificateList

set /a MaxAgo=24*60*60 + 35*60

if BadCertificateList.ModifyedSecAgo GTR !MaxAgo! (
  echo Too old BadCertificateList file
) else (
  echo BadCertificateList file is ok
)


goto :eof

: (C) CyberMuesli 2012.06.16

::===========================================================================
:d2jdn
::===========================================================================
:: %1=date as DD.MM.YYYY. ret: %2:=%d2jdn%:=julian day number
:: reference http://ru.wikipedia.org/wiki/Юлианская_дата
set d2jdn.Param=%~1
set d2jdn.Sign=!d2jdn.Param:~6,1!
if "!d2jdn.Sign!"=="-" (
  set d2jdn.Param=!d2jdn.Param:-=!
)

set d2jdn.Year=!d2jdn.Param:~6,4!
if "!d2jdn.Sign!"=="-" (
  set /a d2jdn.Year=-!d2jdn.Year! + 1
)
set d2jdn.Month=!d2jdn.Param:~3,2!
set d2jdn.Day=!d2jdn.Param:~0,2!
set /a d2jdn.Day=100%d2jdn.Day% %% 100
set /a d2jdn.Month=100%d2jdn.Month% %% 100

set /a d2jdn.A=(14-d2jdn.Month)/12
set /a d2jdn.Y=d2jdn.Year+4800-d2jdn.A
set /a d2jdn.M=d2jdn.Month+12*d2jdn.A-3

for /f "tokens=1 delims=:" %%i in ("%0") do (
    set /a "%%i=d2jdn.Day + (153*d2jdn.M+2)/5 + 365*d2jdn.Y + d2jdn.Y/4 - d2jdn.Y/100 + d2jdn.Y/400 - 32045"
    if not "%2"=="" (set %2=!%%i!)
)
goto :eof

::===========================================================================
:StrLen
::===========================================================================
:: %1=VarName, ret !strLen!
set StrLen.S=A!%~1!
set StrLen=0
for /L %%P in (12,-1,0) do (
    set /a "StrLen|=1<<%%P"
    for %%I in (!StrLen!) do if "!StrLen.S:~%%I,1!"=="" set /a "StrLen&=~1<<%%P"
)
goto :eof

::===========================================================================
:dt2sec
::===========================================================================
:: %1="DD.MM.YYYY HH:MM:SS", [%2:=%:dt2sec%:=date time in seconds from 01.01.1980]

set dt2s.Param=%~1
set dt2s.Year=!dt2s.Param:~6,4!
set dt2s.Month=!dt2s.Param:~3,2!
set dt2s.Day=!dt2s.Param:~0,2!
set dt2s.HH=!dt2s.Param:~11,2!
set dt2s.MM=!dt2s.Param:~14,2!
set dt2s.SS=!dt2s.Param:~17,2!

set dt2s.HH=!dt2s.HH: =!
call :strLen dt2s.HH & if !strLen!==1 (set dt2s.HH=0!dt2s.HH!)

if %dt2s.Year% LSS 1980 (
  set %2=0
  goto :eof
)

if "%dt2s.Year%.%dt2s.Month%.%dt2s.Day% %dt2s.HH%:%dt2s.MM%:%dt2s.SS%" GEQ "2048.01.19 03:14:07" (
  set /a %2=0x7FFFFFFF+0
  goto :eof
)

call :d2jdn %dt2s.Day%.%dt2s.Month%.%dt2s.Year%
set /a dt2s.Days=d2jdn-2444240

set /a dt2s.HH=100%dt2s.HH% %% 100
set /a dt2s.MM=100%dt2s.MM% %% 100
set /a dt2s.SS=100%dt2s.SS% %% 100

for /f "tokens=1 delims=:" %%i in ("%0") do (
    set /a "%%i=dt2s.Days*86400 + dt2s.HH*3600 + dt2s.MM*60 + dt2s.SS"
    if not "%2"=="" (set %2=!%%i!)
)
goto :eof

: (C) CyberMuesli 2012
: Файловые функции

::===========================================================================
:FileInfo
::===========================================================================
:: %1: filename %2: VarName
:: return: VarName.Origin VarName.Drive VarName.Path... etc

set %2.Origin=%1
for %%i in (%1) do (
  set %2.Drive=%%~di
  set %2.Path=%%~pi
  set %2.DPath=%%~dpi
  set %2.PNX=%%~fi
  set %2.NX=%%~nxi
  set %2.DT=%%~ti
  set %2.Size=%%~zi
)

if not "!%2.DT!"=="" (
  set %2.Year=!%2.DT:~6,4!
  set %2.Month=!%2.DT:~3,2!
  set %2.Day=!%2.DT:~0,2!
  set %2.HH=!%2.DT:~11,2!
  set %2.MM=!%2.DT:~14,2!
  set %2.SS=00
  call :dt2sec "%DATE% %TIME%" Now.DTSec
  call :dt2sec "!%2.DT!.00"    %2.DTSec
  set /a %2.ModifyedSecAgo=Now.DTSec-%2.DTSec
)
goto :eof

::===========================================================================
:DisplayFileInfo
::===========================================================================
echo %1.Origin                !%1.Origin!
echo %1.Drive                !%1.Drive!
echo %1.Path                !%1.Path! 
echo %1.DPath                !%1.DPath! 
echo %1.PNX                !%1.PNX!
echo %1.NX                !%1.NX!
echo %1.DT                !%1.DT!
echo %1.DTSec                !%1.DTSec!
echo %1.Size                !%1.Size!
echo %1.Year,Month,Day        !%1.Year!,!%1.Month!,!%1.Day!
echo %1.HH,MM,SS        !%1.HH!,!%1.MM!,!%1.SS!
echo %1.ModifyedSecAgo        !%1.ModifyedSecAgo!
goto :eof

::===========================================================================
:LastFileByDate
::===========================================================================
:: %1=Path[\[FileMask]] %2:=full file name

set lfbd.DirLineN=1
for /f "tokens=* delims=" %%a in ('dir %1 /b /o-d /a:-d 2^>nul') do (
    if !lfbd.DirLineN!==1 (
      set lfbd.DirNX=%%a
    )
    set /a lfbd.DirLineN+=1
)

if not "!lfbd.DirNX!"=="" (
  for %%a in ("%~1\") do (
      set lfbd.DPath=%%~dpa
  )
)

set lfbd.DirNX=!lfbd.DPath!!lfbd.DirNX!

for /f "tokens=1 delims=:" %%i in ("%0") do (
    set %%i=!lfbd.DirNX!
    if not "%2"=="" (set %2=!%%i!)
)
goto :eof



Время: 22:18.

Время: 22:18.
© OSzone.net 2001-