dos批处理得出最近修改文件夹

     最近写了个批处理文件,实现的功能是:一个文件夹(比如a文件夹)里面有很多子文件夹,需要找到最新的2个子文件夹(最近修改时间)。刚开始的思路是:得到a里面每个子文件夹的修改时间,然后比较,这样虽然思路清晰,但是却非常麻烦,特别是如果子文件夹很多运算就很多,还要涉及到日期的比较,特别麻烦,不可取。后来采取的方法是:把a里面的子文件夹名字取出来,按照修改时间先后排序(b文件),然后取出最后面的2条记录。这样思路也非常清晰,但是这样又有新的问题了,怎么从b文件里取出最后面的两条记录。在这个地方我卡了大半天(也许dos批处理命令真的太弱,或者我太菜了,没有找到像head之类的方法,edit文件也没成功,如果有高手知道,麻烦留言告知一下),后来实在没辙了就绕了个弯实现了这个功能。思路如下:先得到b文件的行数(假如为length),然后循环b文件跳过length-2行,也就是从倒数第二行开始往下循环,这样刚好得到最后两行的记录,也就是最新修改过的前2个子文件夹。

代码如下:

getLastestModifyfolder
rem D:\test是a文件夹
d:
cd D:\test
rem 得到b文件(E:\directory)
dir /b /o:d>E:\directory
rem 得到类型为 “行数:最后一行内容”的字符串(str)
for /f "tokens=1 delims=" %%i in ('findstr /n "." E:\directory') do echo %%i>str
rem 截取行数(length)
for /f "tokens=1 delims=:" %%a in (str) do set /a length=%%a
rem 得到需要跳过循环的行数
set /a span=length-2
rem 得到最后的两个记录
for /f "skip=%span%" %%j in (E:\directory) do echo %%j

del /q str
del /q E:\directory

如果想得到最新修改文件(不是文件夹)的时间可以用下面的命令:

getLastestModifyFileTime
d:
cd D:\test
(for /f "delims=" %%a in ('dir /B /AD "D:\test"') do (
set a=%%a
setlocal enabledelayedexpansion
set/p=!a! <nuls
for /f "tokens=2 delims==." %%b in ('wmic datafile where name^="!a:\=\\!" get LastModified/value') do echo %%b
Endlocal
))>result.txt

也可以得到LastAccessed, LastModified, Name, FileSize等数据,可以参考:http://technet.microsoft.com/zh-cn/library/cc758713(WS.10).aspx,或者
http://qlj.sh.cn/system/20090430/wmic-command/

欢迎高手 批评指正。


posted on 2011-04-20 22:45  wqh  阅读(583)  评论(0编辑  收藏  举报