5个计算天数的批处理代码第1/3页
作者 佚名
来源 批处理
浏览
发布时间 2013-07-09
于是把我的收集整理后发出来给大家共享一下。 说明: 收集整理:随风@bbs.bathome.cn2008-04-15 第一个代码作者:WillSort出自:cn-dos 第二、三、四、个代码作者:namejm出自:cn-dos 第五个为bat结合vbs代码,作者及出处都不详。 其中第一及第五个代码,输入负数为:追溯指定日期以后的天数。 第二、三、四个代码,未作测试,但输入正整数是可以的。也就是追溯指定日期以前的天数。 代码一、 作者:WillSort 复制代码 代码如下: ::DateDel2.bat-删除指定路径下指定日数以前修改的文件 ::作者:WillSort-2005-9-2-CMD@WinXP出自:cn-dos ::注意事项:变量tian为指定日数,昨天为1,前天为2,依次类推 ::核心算法:RitchieLawrence,updated2002-08-13.Version1.1 :: @echooff&setlocalENABLEEXTENSIONS call:Date2Day%date:~0,10%sdays rem下行的%tian%代表天数. set/ptian=请指定要追溯的天数: set/asdays-=tian call:Day2Date%sdays%difdate echo.&echo. echo指定的日期是:%date:~0,10% echo. echo%tian%天前的日期是:%difdate% echo.&pause exit :Date2Day setlocalENABLEEXTENSIONS for/f"tokens=1-3delims=/-,"%%ain(''echo/%1'')do( setyy=%%a&setmm=%%b&setdd=%%c ) set/add=100%dd%%%100,mm=100%mm%%%100 set/az=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 set/aj=j/5+dd+y*365+y/4-y/100+y/400-2472633 endlocal&set%2=%j%&goto:EOF :Day2Date setlocalENABLEEXTENSIONS set/ai=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a set/ad=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/add=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 (if%mm%LSS10setmm=0%mm%)&(if%dd%LSS10setdd=0%dd%) endlocal&set%2=%yy%-%mm%-%dd%&goto:EOF 代码二、 以下三个代码作者全是namejm 复制代码 代码如下: ::作者:namejm荣誉版主出自:cn-dos @echooff ::求N天前的日期 ::思路: :: 模拟手工运算,用日期数减去天数,差值为负时向高位借1。 ::特点: :: 代码简洁,容易理解,速度快慢取决于指定的天数大小 ::日期可以带星期,但是,必须以年月日的顺序排列 ::年份必须是四位,否则会出错 @echooff :Main cls setday=%date% setdays=0 echo.&echo. echo指定的日期是:%day% echo. set/pinput=请指定要追溯的天数: setlocalenabledelayedexpansion ::提取日期 for/f"tokens=1-3delims=-/."%%iin("%day%")do( set/asy=%%i,sm=100%%j%%100,sd=100%%k%%100 ) set/asd-=input if%sd%leq0call:count cls echo.&echo. echo指定的日期是:%day% echo. setsm=0%sm% setsd=0%sd% echo%input%天前的日期是:%sy%-%sm:~-2%-%sd:~-2% pause>nul gotoMain :count set/asm-=1 if!sm!equ0set/asm=12,sy-=1 call:days set/asd+=days if%sd%leq0gotocount goto:eof :days ::获取指定月份的总天数 set/aleap="^!(sy%%4)&^!(^!(sy%%100))|^!(sy%%400)" set/amax=28+leap setnum=0 setstr=31%max%31303130313130313031 for%%iin(%str%)do( set/anum+=1 if%sm%equ!num!setdays=%%i&goto:eof ) goto:eof 代码三 复制代码 代码如下: @echooff ::作者:namejm荣誉版主出自:cn-dos ::求N天前的日期 ::思路: :: 把当前日期转换为天数 :: 用当前天数减去N天 :: 把结果再转换为日期 ::具体操作是: :: 逐年计算天数 ::特点: ::代码简洁,容易理解,速度较慢,但是不受指定天数大小的影响 setlocalenabledelayedexpansion :Main cls ::日期可以带星期,但是,必须以年月日的顺序排列 ::年份必须是四位,否则会出错 setday=%date% setdays=0 echo.&echo. echo指定的日期是:%day% echo. set/pinput=请指定要追溯的天数: rem========把指定日期转换为天数======== ::提取日期 for/f"tokens=1-3delims=-/."%%iin("%day%")do( set/asy=%%i,sm=100%%j%%100,sd=100%%k%%100 ) ::把年份转化为天数 for/l%%iin(1,1,%sy%)do( set/aleap="^!(%%i%%4)&^!(^!(%%i%%100))|^!(%%i%%400)" set/adays=days+365+leap ) ::把月份转化为天数 set/anum=0,mday=0,max=28+leap setstr=031%max%313031303131303130 for%%iin(%str%)do( set/anum+=1 if!num!leq!sm!set/amday+=%%i ) set/adays=days+mday+sd set/adays-=input rem========把天数转换为日期======== ::获取年份 for/l%%iin(1,1,%sy%)do( set/aleap="^!(%%i%%4)&^!(^!(%%i%%100))|^!(%%i%%400)" set/adays_tmp=365+leap if!days!gtr!days_tmp!( set/adays-=days_tmp sety=%%i ) ) ::获取月份及日期 set/am=1,max=28+%leap% setstr=31%max%313031303131303130 for%%iin(%str%)do( if!days!gtr%%i( set/adays-=%%i set/am+=1 )elsegotonext ) :next setm=0%m% setd=0%days% cls echo.&echo. echo指定的日期是:%day% echo. echo%input%天前的日期是:%y%-%m:~-2%-%d:~-2% pause>nul gotoMain 代 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 批处理bat之永不被杀的后门下一篇: 迅速删除非法文件名的批处理代码
关于5个计算天数的批处理代码第1/3页的所有评论