batch file中的文件大于4分钟

我正在使用这个脚本来计算一个文件的时间:

set "filename=myfile.txt" rem extract current date and time for /f "tokens=1-5 delims=.:, " %%a in ("%date% %time%") do ( set day=%%a&set mon=%%b&set yr=%%c&set hr=%%d&set min=%%e ) rem extract file date and time for /f "tokens=1-5 delims=.:, " %%a in ('"dir %filename%|find "%filename%""') do ( set fday=%%a&set fmon=%%b&set fyr=%%c&set fhr=%%d&set fmin=%%e ) rem calculate age of file (in minutes) set /a "age=((hr*60+min)-(fhr*60+fmin)+(24*60))%%(24*60)" set /a "max=8" if %age% geq %max% echo.file is older than 8 minutes 

但我有一些错误,并纠正我不得不使用以下条件:

  if %hr% EQU 08 set hr=8 if %hr% EQU 09 set hr=9 if %min% EQU 08 set min=8 if %min% EQU 09 set min=9 if %fhr% EQU 08 set fhr=8 if %fhr% EQU 09 set fhr=9 if %fmin% EQU 08 set fmin=8 if %fmin% EQU 09 set fmin=9 

有没有更简单的方法来解决这个问题,而不必使用我创build的那些条件呢?

正如我上面所评论的,纯数学在数学上是非常可怕的。 这是一个混合的批处理/ JScript脚本,可以很容易地计算文件的年龄(编辑:或目录)。 无需担心小时滚动,日期更改,夏令时或任何其他垃圾。 1970年1月1日午夜以来,这一切都是以毫秒为单位的。

 @if (@CodeSection==@Batch) @then :: age.bat filename.ext :: get age of file in minutes @echo off setlocal if "%~1"=="" echo Usage: age.bat filename.ext && goto :EOF if not exist "%~1" echo %1 not found. && goto :EOF for /f %%I in ('cscript /nologo /e:JScript "%~f0" "%~1"') do ( echo %1 is %%I minutes old. rem :: Now use "if %%I gtr 4" here to take whatever actions you wish rem :: on files that are over 4 minutes old. ) goto :EOF :: end batch portion / begin JScript @end var fso = new ActiveXObject("scripting.filesystemobject"), arg = WSH.Arguments(0), file = fso.FileExists(arg) ? fso.GetFile(arg) : fso.GetFolder(arg); // Use either DateCreated, DateLastAccessed, or DateLastModified. // See http://msdn.microsoft.com/en-us/library/1ft05taf%28v=vs.84%29.aspx // for more info. var age = new Date() - file.DateLastModified; WSH.Echo(Math.floor(age / 1000 / 60)); 

有关批处理/ JScript混合脚本的更多信息, 请参阅此GitHub页面 。 上面使用的样式类似于该页面上的Hybrid.bat。