| @echo off&color 1f |
| :: 删除 N 天前“创建”或“修改”的文件 |
| :: by 小楼一夜听春雨 @bbs.bathome.net 2007-11-13 |
| :: 2009-01-09 日更新 (可处理含特殊符号&!的文件(夹)名) |
| :: 日期必须是 yyyy-mm-dd 格式 |
| :: 计算日期部分出自 @cn-dos by will sort |
| set "f=%date:~4,1%" |
| for %%a in (wjj c m z cw cuowu leixin tian zml yes) do set "%%a=" |
| :start |
| setlocal |
| echo\&echo 请输入要处理的文件夹全路径,或拖放文件夹来此窗口。 |
| echo.&set /p wjj= |
| set "wjj=%wjj:"=%" |
| if "%wjj:~-1%"=="\" set "wjj=%wjj:~0,-1%" |
| set "wjj=%wjj%"&cls |
| if not exist "%wjj%" ( |
| echo\&echo 没有 "%wjj%" 这个文件夹,请重新输入。 |
| endlocal&goto start |
| ) |
| endlocal&set "wjj=%wjj%"&cls |
| :loop1 |
| setlocal |
| title "%wjj%" |
| echo\&echo 请选择要删除的文件类型,c 为创建的文件, w 为修改的文件 |
| echo.&set /p cw= 请选择 [ c , w ] ? &cls |
| if /i not "%cw%"=="c" if /i not "%cw%"=="w" set cuowu=a |
| if defined cuowu ( |
| echo\&echo 输入错误,请重新输入。 |
| endlocal&goto loop1 |
| ) |
| endlocal&set "leixin=/t%cw%" |
| if /i "%leixin%"=="/tc" (set c=创建) else set c=修改&cls |
| :loop2 |
| setlocal |
| title 删除 "%wjj%" %c% 的文件 |
| echo\&echo 请输入天数,即:需要删除多少天前 “%c%” 的文件。 |
| echo.&set /p tian= 请输入: &cls |
| echo %tian%|findstr "^[0-9]*$" >nul|| ( |
| echo\&echo 输入错误,必须是纯数字,请重新输入。 |
| endlocal&goto loop2 |
| ) |
| endlocal&set "tian=%tian%"&cls |
| title 删除 "%wjj%" %tian% 前 %c% 的文件 |
| echo\&echo 请选择是否处理子目录, y 是, n 否。 |
| echo\&set /p zml= [ y , n ] ? |
| if /i "%zml%"=="y" (set zml=/s&set z=(含子目录) |
| ) else set "zml="&set z=(不含子目录) |
| call :Date2Day "%date%" %tian% Day |
| cls&color fc |
| echo\&echo 即将删除 "%wjj%" 中%z% %Day% 以前 “%c%” 的文件 |
| echo\&echo 回车继续,其它键退出。 |
| echo\&set /p yes= |
| if defined yes exit |
| cls |
| title 删除 "%wjj%" 中%z% %Day% 以前 “%c%” 的文件 |
| :::::::::::::::::::: 判断并删除文件 :::::::::::::::::::::::::::::::::: |
| for /f "tokens=*" %%i in ( |
| 'dir /a-d %leixin% %zml% "%wjj%"^|findstr /b "[0-9] ..:"' |
| ) do ( |
| for /f "tokens=1* delims=\" %%a in ("%%i") do ( |
| if not "%%b"=="" (set ml=%%i) else ( |
| for /f "tokens=1-3* delims= " %%c in ("%%i") do ( |
| set "str=%%~nxf" |
| setlocal enabledelayedexpansion |
| if exist "!ml:~0,-4!\!str!" ( |
| if "%%c" lss "%Day%" ( |
| ECHO del/q "!ml:~0,-4!\!str!" |
| endlocal&set /a m+=1 |
| ) |
| ) else endlocal |
| )))) |
| color 0a&echo\ |
| if not defined m (echo 文件夹 "%wjj%" 中没有 %Day% 以前 %c% 的文件. |
| ) else (echo 删除完成。。。&echo\&echo\ 共删除 %m% 个文件) |
| echo\&pause&exit |
| ::::::::::::::::::::::::::: 计算日期 :::::::::::::::::::::::::::::::::: |
| |
| |
| :Date2Day 计算指定天数 前/后 的日期 (封装) |
| @echo off&setlocal |
| for /f "tokens=1-3 delims=/-:\, " %%a in ('echo/%~1') do ( |
| set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100) |
| set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 |
| set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 |
| set /a i=j-%~2,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a |
| set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 |
| set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 |
| (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) |
| endlocal&set %~3=%yy%%f%%mm%%f%%dd%&goto :EOFCOPY |