- @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
- ::::::::::::::::::::::::::: 计算日期 ::::::::::::::::::::::::::::::::::
- rem 使用方法:call :Date2Day 2007-11-12 2 Day
- rem 变量 Day 就是2007-11-12 减2的结果。
- :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 :EOF
复制代码
|