标题: [日期时间] 批处理删除N天前创建或修改的文件 [打印本页]
作者: 随风 时间: 2007-11-14 04:55 标题: 批处理删除N天前创建或修改的文件
::- @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
复制代码
作者: novaa 时间: 2007-11-28 22:07 标题: 部分算法不懂
for /f "tokens=1-3 delims=-/. " %%a in ("%date%") do (
set /a xyy=%%a,xmm=100%%b%%100,xdd=100%%c%%100
为什么要用xmm=100%%b%%100啊
直接xmm=%%b不可以?
作者: 随风 时间: 2007-11-29 01:29
这样是把首位的0去掉,否则 遇到0开头的日期或时间,计算的时候会出错。
作者: sihonghong20061 时间: 2008-8-1 15:40 标题: 回复 3楼 的帖子
好像错了 问一下 是不是应该for /f "tokens=1-3 delims=-/. " %%a in ("%date%") do (
set /a xyy=%%a,xmm=100%b%%100,xdd=100%c%%100
应该只有一个% 问一下 我说的对吗
作者: Batcher 时间: 2008-8-5 23:18 标题: 回复 4楼 的帖子
你是不是把控制变量前面的百分号和取余操作的百分号搞混淆了?呵呵。
作者: gxnews 时间: 2008-10-24 20:45
厉害,真厉害,I 服了 U
作者: 92kp 时间: 2008-10-28 17:47
不知道这个有什么用处。是不是20天内没有使用过的文件都可以安全删除呢?一般情况下是不是这样的呢。
作者: Batcher 时间: 2008-10-28 22:47 标题: 回复 7楼 的帖子
"20天内"?你是得出这个结论的?
作者: xwfswh 时间: 2008-10-29 10:31
新手学习一下
收藏一下,现在暂时还看不太懂~~
作者: wolfly22 时间: 2008-12-21 13:59
强人的强悍都是想象不了……
作者: chao8287 时间: 2009-2-26 13:55
请问楼主如何更改一下来实现删除N天前创建的文件夹? 十分感谢!!!
作者: Batcher 时间: 2009-2-27 22:07 标题: 回复 11楼 的帖子
【方案汇总】批处理删除指定天数日期之前的文件
http://bbs.bathome.net/thread-3334-1-1.html
【方案汇总】批处理删除指定天数日期之前的文件夹
http://bbs.bathome.net/thread-3503-1-1.html
作者: sampeck 时间: 2009-6-26 09:59
凡是删除文件的批处理我都要看懂了才用的.这个暂时收藏了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |