用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件
核心代码:
@echooff ::byoicu#lsxk.org ::15:172011-1-13 ::如果只是删除指定日期或N天前修改的文件,用forfiles即可 FORFILES/P"C:\测试目录"/S/M*.log/D-3/C"cmd/cif@isdir==FALSEechodel@file" ::指定日期(包含)前修改的文件:/D-yyyy/mm/dd ::以下是流水账 ::使用限制:控制面板里设定日期格式为中文(中国) ::只有dir/tc才能查看到文件创建时间,默认dir都是dir/tw ::为了取出创建时间,只好用两次for+find,肯定很慢。 cd/d你的目录 ::如果要包含子目录,用for/r.%%ain(*) ::显示文件修改时间 for%%ain(*)doecho"%%~ta" ::中文格式时相当于 for%%ain(*)dofor/f"tokens=1,2*delims="%%bin( 'dir/tw"%%a"^|find/i"%%~nxa"' )doecho"%%b%%c" ::删除某个时间后修改过的文件(这个简单) for%%ain(*)doif"%%~ta"gtr"2008-04-01"echodel"%%a" ::这个才是显示文件创建时间 for%%ain(*)dofor/f"tokens=1,2*delims="%%bin( 'dir/tc"%%a"^|find/i"%%~nxa"' )doecho"%%b%%c" ::删除某个时间之后创建的文件,如果要删除某个时间之前创建的,更改两 ::处gtr为lss。除了日期外,增加判断时间,可以去掉else段。 for%%ain(*)dofor/f"tokens=1,2*delims="%%bin( 'dir/tc"%%a"^|find/i"%%~nxa"')do( if"%%b"gtr"2010-12-15"( echodel"%%a" )else( if"%%b"equ"2010-12-15"if"%%c"gtr"14:50"echodel"%%a" ) ) ::用批处理计算时间受到系统的日期格式限制,影响到用set取某一字段的值, ::批处理计算时间方法过于复杂,要么只用vbs脚本删除文件,要么用批处理 ::配合vbs脚本删除。 ::取10天之前的日期,取回放入变量OldDate echowscript.echodateadd("d",-10,date)>GetOldDate.vbs for/f%%ain('cscript/nologoGetOldDate.vbs')dosetOldDate=%%a echo%OldDate% delGetOldDate.vbs ::VBScript里没有Format函数,Year、Month、Day等函数取数值后也要处理小 ::于10的数字,只能用下面的方法整理日期格式 echowscript.echodateadd("d",-10,date)>GetOldDate.vbs for/f"tokens=1,2,3*delims=-/."%%iin('cscript/nologoGetOldDate.vbs')do( sety=%%i setm=%%j setd=%%k ) if%m%LSS10setm=0%m% if%d%LSS10setd=0%d% setOldDate=%y%-%m%-%d% echo%OldDate% delGetOldDate.vbs ::综合上文,最后得到我们想要的结果 ::删除10天前创建的旧文件(不含子目录) echowscript.echodateadd("d",-10,date)>GetOldDate.vbs for/f"tokens=1,2,3*delims=-/."%%iin('cscript/nologoGetOldDate.vbs')do( sety=%%i setm=%%j setd=%%k ) if%m%LSS10setm=0%m% if%d%LSS10setd=0%d% setOldDate=%y%-%m%-%d% delGetOldDate.vbs for%%ain(*)dofor/f"tokens=1,2*delims="%%bin( 'dir/tc"%%a"^|find/i"%%~nxa"')do( if"%%b"lss"%OldDate%"echodel"%%a" ) ::删除10天前修改的旧文件(不含子目录) echowscript.echodateadd("d",-10,date)>GetOldDate.vbs for/f"tokens=1,2,3*delims=-/."%%iin('cscript/nologoGetOldDate.vbs')do( sety=%%i setm=%%j setd=%%k ) if%m%LSS10setm=0%m% if%d%LSS10setd=0%d% setOldDate=%y%-%m%-%d% delGetOldDate.vbs for%%ain(*)doif"%%~ta"lss"%OldDate%"echodel"%%a" ::本文全部用echodel代替del,只是显示要删除的文件,并不实际删除。 pause goto:eof