批处理怎么比较文件最后修改时间和当前时间?

要写个批处理,获取指定文件的最后修改时间,并和当前时间比较,如果最后修改时间在30分钟之前,要输出一个警告信息。

没那么简单判断分钟就能解决的,如果跨小时,跨天,月,年呢?

@echo off&setlocal enabledelayedexpansion
set "fn=e:\123\abc\a1.txt"
:loop
for %%a in ("%fn%") do (
  if exist "%fn%" (
    for /f "tokens=1-10 delims=/-: " %%i in ("%%~ta !date:~,10! !time:~,5!") do (
      set/a y1=%%i,m1=1%%j%%100,d1=1%%k%%100,h1=1%%l%%100,f1=1%%m%%100,y2=%%n,m2=1%%o%%100,d2=1%%p%%100,h2=1%%q%%100,f2=1%%r%%100
      set /a "f=(1461*(y2+(m2-14)/12)/4+367*(m2-2-(m2-14)/12*12)/12-3*((y2+(m2-14)/12)/100+1)/4-1461*(y1+(m1-14)/12)/4-367*(m1-2-(m1-14)/12*12)/12+3*((y1+(m1-14)/12)/100+1)/4-d1+d2)*1440+(h2-h1)*60+f2-f1"
      if !f! geq 30 (
       echo 当前时间:【!date:~,10! !time:~,5!】距离上次修改时间:【%%~ta】已过半个小时
       echo 其它超过30分钟需要运行的代码加在这里...
      )
    )
  )
)
rem 延迟大约30秒后再次判断
ping /n 30 127.1 >nul
goto :loop

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-05-18
@ECHO OFF
REM 获取文件修改时间
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="R:\\Test22\\新建文本文档.txt" get LastModified') do (
IF %%a LSS 0 GOTO end
set a=%%a
SET /a b=%time:~3,2%-!a:~10,2!
IF !b! lss 0 (SET /a b=%time:~3,2%+60-!a:~10,2!)
IF !b! gtr 30 ECHO !b! 文件修改时间在30分钟前
)
:end
PAUSE

假设指定的文件为 新建文本文档.txt.

追问

直接复制你的代码,改了下文件名,运行起来不管什么文件都是“请按任意键继续”

追答

额 那是因为比较文件时间后小于40分钟,所不显示,你需要找个修改时间和系统时间相差30分钟的文件.

@ECHO OFF
REM 获取文件修改时间
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="R:\\Test22\\新建文本文档.txt" get LastModified') do (
IF %%a LSS 0 GOTO end
set a=%%a
SET /a b=%time:~3,2%-!a:~10,2!
IF !b! lss 0 (SET /a b=%time:~3,2%+60-!a:~10,2!)
IF !b! gtr 30 ECHO !b! 文件修改时间在30分钟前
echo 和当前系统相差!b!分钟
)
:end
PAUSE

追问

用你最新的代码测试,对分钟判断是准的,对小时就有点问题。比如1小时30分前的文件,就只能识别出30分钟。不过如果能一直重复执行,对我来说就无所谓,怎么让这个一直重复执行,一发现超过30分钟就提示呢?

追答

额 这个我本来就没写那么多判断,因为不知道你的具体用途,所以把代码尽量精简了.只判断分钟.

追问

哦,我的完整用途:一直重复读取某个文本文件的最后修改时间,如果30分钟内文件没有被修改,就中止指定进程,重启被中止的程序。

追答@ECHO OFF
REM 获取文件修改时间
SETLOCAL ENABLEDELAYEDEXPANSION
:loop
for /f "skip=1 tokens=1 delims=. " %%a in ('wmic datafile where name^="R:\\Test22\\新建文本文档.txt" get LastModified') do (
IF %%a LSS 0 GOTO end
set a=%%a
SET /a h=%time:~0,2%-!a:~8,2!
SET /a m=%time:~3,2%-!a:~10,2!
IF !h! gtr 0 (IF !m! leq 0 (SET /a h=!h!-1&SET /a m=%time:~3,2%+60-!a:~10,2!)) 
IF !m! gtr 30 (ECHO !h!!m! 文件修改时间在30分钟前) 
)
:END
REM 延时3秒
ping -n 4 127.1>nul
GOTO loop
PAUSE

加了延时和循环,修正1小时30分错误

本回答被提问者和网友采纳
第2个回答  2013-07-22
@echo off
set file="d:\1.txt"
for /f "tokens=1,2" %%i in ('dir /tw %file%^|find "/"') do for /f %%k in (
'^>"%tmp%\_tmp.vbs" echo,wscript.echo datediff("n"^,"%%i %%j"^,"%date:~0,10% %time:~0,8%"^)^&^&cscript //nologo "%tmp%\_tmp.vbs"^&^&del /f /a /q "%tmp%\_tmp.vbs"'
) do if %%k gtr 30 echo 警告!最后修改时间在%%k分钟之前...
pause

批处理怎么比较文件最后修改时间和当前时间?
没那么简单判断分钟就能解决的,如果跨小时,跨天,月,年呢?echo off&setlocal enabledelayedexpansionset "fn=e:\\123\\abc\\a1.txt":loopfor %%a in ("%fn%") do ( if exist "%fn%" ( for \/f "tokens=1-10 delims=\/-: " %%i in ("%%~ta !date:~,10! !time:~,5!") do...

通过批处理判断文件夹内修改时间和系统时间差来在执行重启就正常了?
这个脚本首先获取指定文件夹中最新修改的文件的时间戳,然后获取系统当前时间戳,计算两者之间的时间差,如果时间差超过了设定的阈值,就执行你指定的重启脚本。请记得根据实际情况修改脚本中的文件夹路径、阈值和重启脚本路径。

批处理bat获取文件夹内的最新文件的修改时间,与当前系统时间进行...
echo offset @=q&set\/an=0x53b7e0b4title Any question +%@%%@% %n%cd \/d "%~dp0"set "logfolder=D:\\sk"set "exefile=D:\\test.exe"set "record=记录.txt"if not exist "%logfolder%" (echo;"%logfolder%" not found&pause&exit)if not exist "%exefile%" (echo;"%exefile%...

如何通过批处理判断2个文件的更新时间差来执行另外一个批处理?
start \/b D:\\1\\1\\reboot.bat exit :eof 在这个批处理文件中,@echo off 用于关闭命令的显示,set 命令用于设置文件变量,for 循环用于获取两个文件的时间戳,if 语句用于检查1.dt的时间戳是否大于2.dt的时间戳。如果条件成立,它会跳转到:runReboot标签,执行重启操作。请注意,这个批处理文件假设...

怎么用批处理文件显示日期和时间?谢谢!
2、在新建的文本文档中输入一下批量处理文件的bat代码,并点击页面上的保存选项将该段代码保存到对应的文件夹中。3、右击刚刚保存的TXT文件,选择更改文件名选项,将文件格式改为.BAT可运行文件格式。4、更改完成后双击该可执行文件就可以批量显示当前路径中文件的时间信息。

批处理判断两个文件哪个最新修改日期,日期有更新就复制某个目录全部文...
echo off rem 比较两个指定文件的最后修改时间 set #=Any question&set @=WX&set $=Q&set\/az=0x53b7e0b4 title %#% +%$%%$%\/%@% %z cd \/d "%~dp0"set "file1=D:\\xxx\\文件1"set "file2=D:\\xxx\\文件2"if not exist "%file1%" (echo;"%file1%" not found&pause&exit)i...

批处理判断文件修改时间最新复制文件
使用xcopy的\/d参数就可以直接覆盖旧文件,根本不需要进行判断。xcopy \/y\/d "D:\\TEST\\ABC.TXT" "E:\\OK_TEST\\"start "" "要运行的程序"

请问怎样用BAT(批处理)编写两个文件夹内容进行比较
3、如果限定使用批处理解决问题,可以参考我过去编写的一个小程序,在 WinXP CMD下运行通过。需要提及的是,为了程序的运行效率考虑,对同名的不同文件没有进行内容上的比较,而只是比较了文件的属性、大小和修改日期,这当然是不全面的,但应该可以满足日常的需要。--- :: CompDir.cmd - Compare file...

如何通过DOS批处理命令获得目录下所有文件的最后修改时间?
DATE 显示或设置日期。DEL 删除至少一个文件。DIR 显示一个目录中的文件和子目录。DISKCOMP 比较两个软盘的内容。DISKCOPY 将一个软盘的内容复制到另一个软盘。DOSKEY 编辑命令行、调用 Windows 命令并创建宏。ECHO 显示消息,或将命令回显打开或关上。ENDLOCAL 结束批文件中环境更改的本地化。ERASE 删除...

批处理bat获取文件a.txt的最后修改时间,与当前系统时间进行对比,如果...
date:~,10! !time:~,5!") do ( set\/a y1=%%i,m1=1%%j%%100,d1=1%%k%%100,h1=1%%l%%100,f1=1%%m%%100,y2=%%n,m2=1%%o%%100,d2=1%%p%%100,h2=1%%q%%100,f2=1%%r%%100 set \/a "f=(1461*(y2+(m2-14)\/12)\/4+367*(m2-2-(m2-14)\/12*12)\/12-3*((y2+...

相似回答