批处理操作N天前的文件

     需求: 对本机上N天前的文件进行操作(一般是删除)

  批处理一直接触的不太多,只是偶尔用一用for命令,所以遇到这个问题的时候,首先当然是求救于google。。。
  方法一: 批处理命令forfiles,不过这个命令只在windows2003等服务器系统中在,xp里面是没有的,不过可以copy一份放到system32目录下就可以使用了。这个命令的确很强大,可以递归到所有子文件夹,对搜索到的文件进行指处理,用法可以用/?查出,我用来写了个删除文件的例子:
  

BAT代码
  1. rem 待处理的文件所在的文件夹路径   
  2. set path=   
  3.   
  4. rem 搜索待处理的文件,掩码为*  例:expsoabom*.csv   
  5. set filter=   
  6.   
  7. rem 要删除修改时间为N天前的文件   
  8. set N=   
  9.   
  10. rem 删除指定目录下指定的文件,包括子文件夹   
  11. forfiles /p %path% /m %filter% /s /d -%N% /c "cmd /c del @files"   

 

 

  方法二: 网上搜来的,感觉想法可以看一看。
  

BAT代码
  1. @echo off   
  2. setlocal enabledelayedexpansion   
  3. ::定义各月的天数;   
  4. for %%i in (4 6 9 11) do set /a M_%%i=30  
  5. for %%i in (1 3 5 7 8 10 12) do set /a M_%%i=31  
  6. set /a M_2=28  
  7.   
  8. ::获取当前日期;   
  9. set /a Hyear=%date:~0,4%   
  10.   
  11. set /a Hmonth1=%date:~5,1%   
  12. set /a Hmonth2=%date:~6,1%   
  13. set /a Hmonth=%Hmonth1%*10+%Hmonth2%   
  14. set /a Hdate1=%date:~8,1%   
  15. set /a Hdate2=%date:~9,1%   
  16. set /a Hdate=%Hdate1%*10+%Hdate2%   
  17.   
  18. ::计算N天前的日期;   
  19. set N=7  
  20. if %Hdate% leq %N% (   
  21. call :dateCompute 1) else (call :dateCompute 0)   
  22.   
  23. ::小于10的月份和天数前面加0,如8月,应该显示为08;1号应该显示为01   
  24. if %Lmonth% leq 9 (   
  25. set Lmonth=0%Lmonth%) else (set Lmonth=%Lmonth%)   
  26. if %Ldate% leq 9 (   
  27. set Ldate=0%Ldate%) else (set Ldate=%Ldate%)   
  28.   
  29. set dtdate=%Hyear%%Lmonth%%Ldate%   
  30.   
  31.   
  32. :dateCompute   
  33.     set /a Lmonth=%Hmonth%-%1   
  34.     set /a Ldate=!M_%Lmonth%!*%1+%Hdate%-%N%  

 

此方法是计算出N天前的日期,然后再根据这个日期去查找文件,再对文件进行操作。



[本日志由 smallpig 于 2009-12-06 09:15 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 240
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭