批处理操作N天前的文件
作者:smallpig 日期:2009-12-06
需求: 对本机上N天前的文件进行操作(一般是删除)
批处理一直接触的不太多,只是偶尔用一用for命令,所以遇到这个问题的时候,首先当然是求救于google。。。
方法一: 批处理命令forfiles,不过这个命令只在windows2003等服务器系统中在,xp里面是没有的,不过可以copy一份放到system32目录下就可以使用了。这个命令的确很强大,可以递归到所有子文件夹,对搜索到的文件进行指处理,用法可以用/?查出,我用来写了个删除文件的例子:
BAT代码
- rem 待处理的文件所在的文件夹路径
- set path=
- rem 搜索待处理的文件,掩码为* 例:expsoabom*.csv
- set filter=
- rem 要删除修改时间为N天前的文件
- set N=
- rem 删除指定目录下指定的文件,包括子文件夹
- forfiles /p %path% /m %filter% /s /d -%N% /c "cmd /c del @files"
方法二: 网上搜来的,感觉想法可以看一看。
BAT代码
- @echo off
- setlocal enabledelayedexpansion
- ::定义各月的天数;
- for %%i in (4 6 9 11) do set /a M_%%i=30
- for %%i in (1 3 5 7 8 10 12) do set /a M_%%i=31
- set /a M_2=28
- ::获取当前日期;
- set /a Hyear=%date:~0,4%
- set /a Hmonth1=%date:~5,1%
- set /a Hmonth2=%date:~6,1%
- set /a Hmonth=%Hmonth1%*10+%Hmonth2%
- set /a Hdate1=%date:~8,1%
- set /a Hdate2=%date:~9,1%
- set /a Hdate=%Hdate1%*10+%Hdate2%
- ::计算N天前的日期;
- set N=7
- if %Hdate% leq %N% (
- call :dateCompute 1) else (call :dateCompute 0)
- ::小于10的月份和天数前面加0,如8月,应该显示为08;1号应该显示为01
- if %Lmonth% leq 9 (
- set Lmonth=0%Lmonth%) else (set Lmonth=%Lmonth%)
- if %Ldate% leq 9 (
- set Ldate=0%Ldate%) else (set Ldate=%Ldate%)
- set dtdate=%Hyear%%Lmonth%%Ldate%
- :dateCompute
- set /a Lmonth=%Hmonth%-%1
- set /a Ldate=!M_%Lmonth%!*%1+%Hdate%-%N%
此方法是计算出N天前的日期,然后再根据这个日期去查找文件,再对文件进行操作。
评论: 0 | 引用: 0 | 查看次数: 240
发表评论
上一篇:
下一篇: 


文章来自:
Tags:
相关日志:






