|
|
发表于 2010-4-7 23:47:31
|
显示全部楼层
借鉴了 4 楼日数序列的方法, 效率仍不高, 看来可看下 FOR 的思路并尝试- @echo off&setlocal enabledelayedexpansion
- (set days=312831303130313130313031)
- set /p ymds=请输入起始日期(yyyymmdd),要使用系统当前日期,请直接回车:
- set /p ymde=请输入截止日期(yyyymmdd),要使用系统当前日期,请直接回车:
- if not defined ymds (set ymds=%date:~0,4%%date:~5,2%%date:~8,2%)
- if not defined ymde (set ymde=%date:~0,4%%date:~5,2%%date:~8,2%)
- if "!ymde!" lss "!ymds!" (
- (set tt=!ymde!)&(set ymde=!ymds!)&(set ymds=!tt!)
- )
- (set y=!ymds:~0,4!)&(set m=!ymds:~4,2!)&(set d=!ymds:~6,2!)
- set /a "y=1!y!-10000, m=1!m!-100, d=1!d!-100"
- echo 起始日期为:!y!-!m!-!d!, 截止日期为:!ymde!
- (set /a index=m*2-2)& for %%i in (!index!) do set dmax=!days:~%%i,2!
- if !m!==2 set /a "dmax+=(^!(y%%4)&^!^!(y%%100))|^!(y%%400)"
- (set _y=000!y!)&(set _y=!_y:~-4!)&(set _m=0!m!)&(set _m=!_m:~-2!)
- :loop
- (set _d=0!d!)&(set _d=!_d:~-2!)
- if "!_y!!_m!!_d!" leq "!ymde!" (echo !_y!!_m!!_d!) else goto :break
- set /a d+=1
- if !d! gtr !dmax! (
- (set d=1)&(set /a m+=1)
- if !m! gtr 12 (set m=1)&(set /a y+=1)&(set _y=000!y!)&(set _y=!_y:~-4!)
- (set _m=0!m!)&(set _m=!_m:~-2!)
- (set /a index=m*2-2)& for %%i in (!index!) do set dmax=!days:~%%i,2!
- if !m!==2 set /a "dmax+=(^!(y%%4)&^!^!(y%%100))|^!(y%%400)"
- )
- goto :loop
- :break
- pause
复制代码 |
|