5个计算天数的批处理代码第1/3页
作者 佚名
来源 批处理
浏览
发布时间 2013-07-09
码四、 复制代码 代码如下: @echooff ::作者:namejm荣誉版主出自:cn-dos ::求N天前的日期 ::思路: :: 把当前日期转换为天数 :: 用当前天数减去N天 :: 把结果再转换为日期 ::具体操作是: : 先按照每年365天计算,然后再计算闰年的个数 :: 最后再做转换 ::特点: :: 代码复杂,不便于理解,但是速度很快 ::计算上还存在bug,可以用11111来和头两个做对比测试,暂时没时间更新 setlocalenabledelayedexpansion :Main cls ::日期可以带星期,但是,必须以年月日的顺序排列 ::年份必须是四位,否则会出错 setday=2007-01-02 set/adays=0,sum=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,y=%%i ) ::把年份抓换为天数 setnum=0 if%sy%lss400gotonext1 call:leap_num :next1 set/aleap_num=sy/4-num ::把月份转换为天数 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!num!lss%sm%set/asum+=%%i ) set/adays=365*sy+leap_num+sum+sd set/adays-=input rem=======把天数转换为日期======= ::获取年份 set/ay=days/365 set/amod1=days%%365 call:leap_num set/amod2=mod1-leap_num :loop2 if%mod2%lss0( set/ay-=1 set/amod2=365+mod2 )elsegotonext2 gotoloop2 ::获取月份及日期 :next2 set/am=1,days=mod2+1,max=28+%leap% setstr=31%max%313031303131303130 for%%iin(%str%)do( if!days!gtr%%i( set/adays-=%%i set/am+=1 )elsegotonext3 ) :next3 setm=0%m% setd=0%days% cls echo.&echo. echo指定的日期是:%day% echo. echo%input%天前的日期是:%y%-%m:~-2%-%d:~-2% pause>nul gotoMain :leap_num ::计算能被100整除但是不能被400整除的年次 set/ay_tmp=(%y:~0,1%%y%-%y%)/10 setnum=0 :loop1 set/amod=y_tmp%%400 if%mod%neq0set/anum+=1 set/ay_tmp-=100 if%y_tmp%geq100gotoloop1 set/aleap_num=y/4-num goto:eof 代码五、 用vbs代码可以更简单。但是需创建tmptmp.vbs临时文件。 复制代码 代码如下: @echooff set/p_tian=请指定要追溯的天数: >tmptmp.vbsechowscript.echodateadd("d",-%_tian%,date) for/f"tokens=1,2,3*delims=-"%%iin(''cscript/nologotmptmp.vbs'')do( set/ay=%%i,m=100%%j%%100,d=100%%k%%100 ) set"difdate=%y%-%m%-%d%" del/qtmptmp.vbs cls&echo.&echo. echo指定的日期是:%date:~0,10% echo. echo%_tian%天前的日期是:%difdate% echo.&pause&exit 第一个看不大懂........ 我再来补充两个嵌vbs的: 第一个是我的,不用生成临时文件: 复制代码 代码如下: ''2>nul3>nul&@echooff&cls ''&ifnot"%1"==""gotoon ''&set/pday=请输入要追溯的天数: ''&startwscript.exe/nologo/e:vbs%0%day% ''&exit setoshell=createobject("wscript.shell") d=wscript.arguments(0) add=dateadd("d",-d,date) myweekday=weekdayname(weekday(add)) s=wscript.scriptfullname oshell.run"cmd/c"&""""&s&""""&""&d&""&add&""&myweekday,1,false :onerrorresumenext ''&title追溯日期&echo今天是:%date%&echo.&echo%1天前是:%2%3&echo.&pause&%0 第二个来自bbs.verybat.cn,出自清风09,有临时文件: 复制代码 代码如下: @echooff set/pd=请输入要追溯的天数: mshtavbscript:createobject("scripting.filesystemobject").opentextfile("wind.txt",2,true).writeline(dateadd("d",-%d%,date))(window.close) for/f%%ain(wind.txt)doecho%d%天前为:%%a pause>nul&delwind.txt |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 批处理bat之永不被杀的后门下一篇: 迅速删除非法文件名的批处理代码
关于5个计算天数的批处理代码第1/3页的所有评论