快速业务通道

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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号