Reputation: 31
I thought this post was exactly what I was looking for:
Find out if file is older than 4 hours in Batch file
However, it doesn't seem to work. Can anyone help?
I have an aplication running on many servers that crashes every once and a while. When it crashes, it no longer writes to its own log file. Therefor, if I can write a bat file to check if that log file has not been modified recently, it can email me an alert. Unfortunately, I need to know if this file has been changed within the last 4 to 5 hours. Knowing if the file was modified within the last day is not good enough. Thanks!
Upvotes: 2
Views: 1890
Reputation: 37589
try this, explanation is in the code:
@ECHO OFF &SETLOCAL
:: Initialisation
CALL :GetInternational
:: Example
SET "date1=Fr 08/30/2013"
SET "time1=19:50:52,17"
:: Get the seconds
call :GetSecs "%date1%" "%time1%" sec1
call :GetSecs "%date%" "%time%" sec2
:: calculate the minutes
set /a elapsedMin="(sec2-sec1)/60"
echo This answer is %elapsedMin% minute(s) old (CET).
:: calculate the hours
:: please note, cmd can't calculate decimal numbers, e.g. 1.23
set /a elapsedHr="(sec2-sec1)/3600"
echo This answer is %elapsedHr% hour(s) old (CET).
:: goto end of file
goto:eof
:GetInternational
:: Sets a bundle of variables by reading the registry settings
for /f "tokens=1,2*" %%a in ('reg query "HKCU\Control Panel\International"') do set "%%a=%%c"
goto :eof
:GetSecs "dateIn" "timeIn" secondsOut
:: Output: Seconds elapsed since 1th Jan. 1970 00:00:00
setlocal
set "dateIn=%~1"
for /f "tokens=2" %%i in ("%dateIn%") do set "dateIn=%%i"
for /f "tokens=1-3 delims=%sDate%" %%a in ("%dateIn%") do (
if %iDate%==0 set /a mm=100%%a%%100,dd=100%%b%%100,yy=10000%%c%%10000
if %iDate%==1 set /a dd=100%%a%%100,mm=100%%b%%100,yy=10000%%c%%10000
if %iDate%==2 set /a yy=10000%%a%%10000,mm=100%%b%%100,dd=100%%c%%100
)
for /f "tokens=1-3 delims=%sTime%%sDecimal% " %%a in ("%~2") do (
set "hh=%%a"
set "nn=%%b"
set "ss=%%c"
)
if 1%hh% lss 20 set hh=0%hh%
if "%nn:~2,1%" equ "p" if "%hh%" neq "12" (set "hh=1%hh%" &set /a hh-=88)
if "%nn:~2,1%" equ "a" if "%hh%" equ "12" set "hh=00"
if "%nn:~2,1%" geq "a" set "nn=%nn:~0,2%"
set /a hh=100%hh%%%100,nn=100%nn%%%100,ss=100%ss%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2,j=j/5+dd+y*365+y/4-y/100+y/400-2472633,j=j*86400+hh*3600+nn*60+ss
endlocal &set "%~3=%j%"
goto :eof
Source: dostips.com
To get the file time and send the email I leave for the OP.
Upvotes: 4