Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - Проверка времени создания файла

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


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

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


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

Отправлено: 08:16, 15-06-2012

 

Аватара для CyberMuesli

Старожил


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

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


Код: Выделить весь код
@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

-------
Кибер Мюсли


Последний раз редактировалось CyberMuesli, 17-06-2012 в 01:16.


Отправлено: 01:06, 17-06-2012 | #2



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

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие БД - Postgresql - действие по истечении времени(проверка кажд день)? Killer_13 Программирование и базы данных 1 05-06-2012 23:08
Переименовать файлы по маске и времени создания porokh AutoIt 1 18-08-2011 11:13
CMD/BAT - [решено] Как создать проверку в программе по времени создания файла white155 Скриптовые языки администрирования Windows 2 01-08-2011 12:52
CMD/BAT - Скачивание файла и проверка на отличия от файла на сервере. maslovt Скриптовые языки администрирования Windows 2 08-05-2010 19:54
C/C++ - Проверка даты и времени. Jonik-Mnimonik Программирование и базы данных 3 20-11-2007 16:15




 
Переход