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

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

代码如下:

ContractedBlock.gif ExpandedBlockStart.gif 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

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

ContractedBlock.gif ExpandedBlockStart.gif 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/

欢迎高手 批评指正。


转载于:https://www.cnblogs.com/wqhtiger/archive/2011/04/20/2023001.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值