Board logo

标题: 如何判断文件修改时间 并执行自解压文件 [打印本页]

作者: benpaonow     时间: 2008-6-3 19:32    标题: 如何判断文件修改时间 并执行自解压文件
如何判断一个文件的修改时间,比如查找c:\windows\syste32\drivers\*.sys的修改时间,1 如果在某天几点之前修改的,就执行别的目录的一个自解压文件,2 如果这个文件是在某天之后修改的则不执行任何文件 这个应该怎么写呀 求高手指教 [ Last edited by benpaonow on 2008-6-3 at 07:35 PM ]

作者: tvzml     时间: 2008-6-3 21:38
@echo off for /f "skip=1 tokens=1,3,5 delims=. " %%a in ('wmic datafile where name^="C:\\WINDOWS\\NOTEPAD.EXE" get CreationDate^,LastAccessed^,LastModified') do set a=%%a & set b=%%b & set c=%%c echo 文件名称: %WINDIR%\NOTEPAD.EXE echo 创建时间: %a:~0,4%年%a:~4,2%月%a:~6,2%日, %a:~8,2%:%a:~10,2%:%a:~12,2% echo 修改时间: %c:~0,4%年%c:~4,2%月%c:~6,2%日, %c:~8,2%:%c:~10,2%:%c:~12,2% echo 访问时间: %b:~0,4%年%b:~4,2%月%b:~6,2%日, %b:~8,2%:%b:~10,2%:%b:~12,2% pause

作者: quya     时间: 2008-6-3 21:45
他只要修改时间,所以能不用 WMIC (貌似第三方程序?)就不用。 提供一个思路,用FOR语句以及FOR语句中的增强替换变量 %~tI (I 是变量) 至于怎么编, 说实话,我暂时不会,请其他人照我思路编编看, 让我也学习一下,谢谢。

作者: bat-zw     时间: 2008-6-3 21:52
假设这个时间点是2008年5月14日7点
@echo off
for /f "delims=" %%i in ('dir /s /a-d /b c:\windows\syste32\drivers\*.sys') do call :lp %%~ti
pause>&goto :eof
for /f "tokens=1-5 delims=/:\- " %%i in ("%1") do if "%%i%%j%%k%%l%%m" lss "200805140700" start "" ".........."  

作者: benpaonow     时间: 2008-6-3 21:57
我比较菜 看不明白 请详细说明 主要是想仔细学习批处理 我就是想让程序判断一下比如c:\windows\syste32\drivers\amsint.sys的修改时间,如果这个时间是在特定的一天之前修改的 则运行共享服务器上的一个自解压文件更新这个文件,如果特定的这天之后修改的就无须运行任何命令 [ Last edited by benpaonow on 2008-6-3 at 10:01 PM ]

作者: bat-zw     时间: 2008-6-3 22:04
特定的一天,楼主不会说是在系统时间一天前吧,那又将麻烦几倍了。 [ Last edited by zw19750516 on 2008-6-3 at 10:07 PM ]

作者: benpaonow     时间: 2008-6-3 22:10
呵呵 不好意思 我这个文件的修改时间是200805261653 这个时间以前的需要运行自解压文件,如果是这个时间或以后的就不需要

作者: benpaonow     时间: 2008-6-3 22:14
wmic后面的语句貌似是wmi服务的语句吧,和SQL的很像

作者: bat-zw     时间: 2008-6-3 22:16
Originally posted by benpaonow at 2008-6-3 22:10: 呵呵 不好意思 我这个文件的修改时间是200805261653 这个时间以前的需要运行自解压文件,如果是这个时间或以后的就不需要
那楼主自己将我上面的代码改一下,同时在"........."中填上完整路径+你要运行的命令就可以了啊。

作者: tvzml     时间: 2008-6-3 22:29
要这么麻烦的话,还不如核对MD5,文件大小呢

作者: benpaonow     时间: 2008-6-3 22:30
Originally posted by zw19750516 at 2008-6-3 10:16 PM: 那楼主自己将我上面的代码改一下,同时在"........."中填上完整路径+你要运行的命令就可以了啊。
不能用呀 不知道是不是我改的有问题 还是怎么回事 能加我QQ聊吗 852275278

作者: benpaonow     时间: 2008-6-3 22:30
Originally posted by tvzml at 2008-6-3 10:29 PM: 要这么麻烦的话,还不如核对MD5,文件大小呢
文件大小101K

作者: quya     时间: 2008-6-3 22:33
Originally posted by zw19750516 at 2008-6-3 09:52 PM: 假设这个时间点是2008年5月14日7点 [code] @echo off for /f "delims=" %%i in ('dir /s /a-d /b c:\windows\syste32\drivers\*.sys') do call :lp %%~ti pause>&goto :eof fo ...
虽然暂时看不懂,但我想办法肯定是对的,因为我看到了我想象中的关键字。我加你分。

作者: HAT     时间: 2008-6-3 23:31
Originally posted by benpaonow at 2008-6-3 10:30 PM: 不能用呀 不知道是不是我改的有问题 还是怎么回事 能加我QQ聊吗 852275278
把你修改以后的代码贴出来看看

作者: benpaonow     时间: 2008-6-4 00:17
Originally posted by HAT at 2008-6-3 11:31 PM: 把你修改以后的代码贴出来看看
@echo off for /f "delims=" %%i in ('dir /s /a-d /b c:\windows\syste32\drivers\fakedisk.sys') do call :lp %%~ti pause>&goto :eof for /f "tokens=1-5 delims=/:\- " %%i in ("%1") do if "%%i%%j%%k%%l%%m" lss "200805261653" start "\\192.168.1.252\save\Update.exe"