日期:2014-05-17 浏览次数:20886 次
::删除创建日期超过指定天数的文件 --- Forever Young [2011-11-17] @echo off ::把需要保留多少天内创建的文件天数赋值给sDay,举例:保留30天内的 set sDay=30 ::指定要操作的路径,这里举例:c:\test set workPath=c:\test ::处理日期格式,因为各语言版本的操作系统日期格式有所不同 set rp="HKCU\Control Panel\International" for /f "tokens=3" %%a in ('reg query %rp% /v sdate^|findstr /i "sdate"') do (set sDate=%%a) for /f "tokens=3" %%a in ('reg query %rp% /v idate^|findstr /i "idate"') do (set iDate=%%a) ::得到当日的天数 call :GetToday %date% ::转到需要操作的路径 pushd %workPath% ::处理文件日期信息,我这里使用了两次不同的获取方式,目的就是准确的得到创建日期和文件名 ::如果不需要获取创建日期,可以减少一次循环 setlocal enabledelayedexpansion for %%i in (*) do ( for /f "tokens=1" %%a in ('dir /tc "%%i"^|findstr "[0-9]*\%sDate%[0-9]*\%sDate%[0-9]*"') do ( set tmpDate=%%a set tmpDate=!tmpdate:%sDate%= ! call :GetDays !tmpDate! set /a dtweens=%tdays% - !days! if !dtweens! gtr %sDay% (del /f /q "%%i") ) ) pause exit ::处理日期到天数的转换 :GetDays if %iDate%==0 (set YY=%3&set MM=%1&set DD=%2) if %iDate%==1 (set YY=%3&set MM=%2&set DD=%1) if %iDate%==2 (set YY=%1&set MM=%2&set DD=%3) IF %MM:~0,1% EQU 0 SET MM=%MM:~1% IF %DD:~0,1% EQU 0 SET DD=%DD:~1% set /a Days=%DD%-32075+1461*(%YY%+4800+(%MM%-14)/12)/4+367*(%MM%-2-(%MM%-14)/12*12)/12-3*((%YY%+4900+(%MM%-14)/12)/100)/4 goto :eof ::处理当日日期的获取 :GetToday echo %1|findstr [0-9]>nul||shift set dn=%1 set dn=%dn:/= % call :GetDays %dn% set tdays=%Days%
------解决方案--------------------
批处理删除指定天数日期之前的文件
http://bbs.bathome.net/thread-3334-1-1.html