使用说明:
输入格式:基准日期 间隔日期1 间隔日期2...... b/B +/-
1,以上必须按顺序输入各个参数,使用空格 或英文逗号,或英文分号;分隔。
2,这里的基准日期,必须为8位数字,必须为纯数字构成
3,间隔时间,必须指定,必须为纯数字构成
4,+/-,必须指定,+为几天后,-为几天前
5,B为模式参数,可以不指定,忽略大小写:
当指定B时,表明间隔日期都是与基准日期的差,此时间隔时间必须为递增数列
当不指定B时,表明间隔日期都是与前一日期的差
示例1:20100610 1 5 7 10 B +
输出:
2010-06-10
2010-06-11
2010-06-15
2010-06-17
2010-06-20
示例2:20100610 1 5 7 10 +
输出:
2010-06-10
2010-06-11
2010-06-16
2010-06-23
2010-07-03
示例3:20100610 1 5 7 10 b -
输出:
2010-06-10
2010-06-09
2010-06-05
2010-06-03
2010-05-30
示例4:20100610 1 5 7 10 -
输出:
2010-06-10
2010-06-09
2010-06-04
2010-05-27
2010-05-17
示例5,关于简化操作:如果想只输入日期如20100610,而其他参数固定,则可以修改代码。
在代码中找到第5行,::set "#P=!#P! 3 7 14 28 43 B +" ,将这里修改成需要的参数,并将行首的 :: 去掉就可以。
输出:
2010-06-10
2010-06-13
2010-06-17
2010-06-24
2010-07-08
2010-07-23- @echo off&set "err=(出错)"
- :Han
- setlocal enabledelayedexpansion
- set/p #P=请必须按照规范输入:
- ::set "#P=!#P! 3 7 14 28 43 B +"
- for %%a in (%#P%) do set/a N+=1&call set #P%%N%%=%%a
- if "!#P%N%!"=="+" (set K=+) else if "!#P%N%!"=="-" (set K=-) else set R=%N%&goto:err
- if %N% leq 2 set R=1&goto:err
- :A
- if not "!#P1:~%A%,1!"=="" set/a A+=1&goto:A
- if %A% neq 8 set R=1&goto:err
- set/a N-=1
- if /i "!#P%N%!"=="B" set B==&set/a N-=1
- for /l %%a in (1,1,%N%) do (set A=!#P%%a!
- for /l %%b in (0,1,9) do if defined A set "A=!A:%%b=!"
- if not "!A!"=="" set R=%%a&goto:err
- if %%a==2 set C=!#P%%a!
- if %%a geq 3 if defined B (set/a C2=!#P%%a!-C1&if !C2! leq 0 set R=%%a&goto:err) else set C2=!#P%%a!
- set "C=!C! !C2!"&set C1=!#P%%a!)
- set Y=%#P1:~0,4%&set M=%#P1:~4,2%&set D=%#P1:~-2%&set Han=!Y!-!M!-!D!
- if "%M:~0,1%"=="0" set M=%M:~1%
- if %M% lss 1 set R=1&goto:err
- if %M% gtr 12 set R=1&goto:err
- if "%D:~0,1%"=="0" set D=%D:~1%
- call:Xing
- if %D% lss 1 set R=1&goto:err
- if %D% gtr %E% set R=1&goto:err
- for %%a in (%C%) do call:Ye,%%a
- for %%a in (%Han%) do echo.%%a
- pause&exit
- :Ye
- set/a D%K%=%1
- :Gu
- call:Xing
- if "%K%"=="+" (
- if %D% gtr %E% set/a M+=1,D-=E
- if !M!==13 set/a Y+=1,M=1
- if %D% gtr %E% goto:Gu
- ) else (
- if %D% leq 0 set/a M-=1,D+=E
- if !M!==0 set/a Y-=1,M=12
- if %D% leq 0 goto:Gu)
- set M_=0%M%&set D_=0%D%&set "Han=!Han! %Y%-!M_:~-2!-!D_:~-2!"
- goto:eof
- :Xing
- set/a "M1=^!(M-2)","Y1=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","M2=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","E=M1*(28+Y1)+M2*30+(^!M1&^!M2)*31"
- goto:eof
- :err
- set #P%R%=!#P%R%!%err%
- echo.输入出现错误:请按任意键重新开始
- set #P&pause>nul&Endlocal&cls&goto:Han
复制代码
[ 本帖最后由 hanyeguxing 于 2010-6-13 11:36 编辑 ] |