返回列表 发帖

[日期时间] 批处理删除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 :EOFCOPY
技术问题请到论坛发帖求助!

部分算法不懂

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不可以?
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

这样是把首位的0去掉,否则 遇到0开头的日期或时间,计算的时候会出错。
技术问题请到论坛发帖求助!

TOP

回复 3楼 的帖子

好像错了   问一下 是不是应该for /f "tokens=1-3 delims=-/. " %%a in ("%date%") do (
set /a xyy=%%a,xmm=100%b%%100,xdd=100%c%%100
  应该只有一个%  问一下 我说的对吗
ss

TOP

回复 4楼 的帖子

你是不是把控制变量前面的百分号和取余操作的百分号搞混淆了?呵呵。

TOP

厉害,真厉害,I 服了 U

TOP

不知道这个有什么用处。是不是20天内没有使用过的文件都可以安全删除呢?一般情况下是不是这样的呢。

TOP

回复 7楼 的帖子

"20天内"?你是得出这个结论的?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

新手学习一下
收藏一下,现在暂时还看不太懂~~
尘莫央

TOP

强人的强悍都是想象不了……

TOP

请问楼主如何更改一下来实现删除N天前创建的文件夹?    十分感谢!!!

TOP

回复 11楼 的帖子

【方案汇总】批处理删除指定天数日期之前的文件
http://bbs.bathome.net/thread-3334-1-1.html

【方案汇总】批处理删除指定天数日期之前的文件夹
http://bbs.bathome.net/thread-3503-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

凡是删除文件的批处理我都要看懂了才用的.这个暂时收藏了

TOP

返回列表