Il file ha più di 4 minuti nel file batch

Sto usando questo script per calcolare il tempo di un file:

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 

Ma ho avuto alcuni errori e per correggere ho dovuto usare le seguenti condizioni:

  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 

C’è un modo più semplice per risolvere il problema senza dover utilizzare quelle condizioni che ho creato?

Come ho già detto sopra, la pura partita è orribile in matematica. Ecco uno script ibrido batch / JScript che calcolerà l’età di un file (modifica: o directory) abbastanza facilmente. Non c’è bisogno di preoccuparsi per i rollover dell’ora, i cambi di giorno, l’ora legale o una qualsiasi altra immondizia. È tutto facile peasy lemon squeeze-y basato su millisecondi dalla mezzanotte del 1 gennaio 1970.

 @if (@[email protected]) @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)); 

Per ulteriori informazioni sugli script ibridi batch / JScript, consultare questa pagina GitHub . Lo stile utilizzato sopra è simile a Hybrid.bat in quella pagina.