[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
计算 100 年的日期 耗时 3.7 秒
  1. @echo off&setlocal enabledelayedexpansion
  2. set t=%time%
  3. echo 请输入8位数的起始日期和结束日期用空格分开
  4. echo 或只输入结束(开始)日期,默认当前日期为起始(结束)日期
  5. echo 输入格式 20080205 21080529&echo.
  6. set xx=19100201
  7. for /f "tokens=1,2" %%i in ("%xx%") do (
  8.    if not "%%j"=="" (set qs=%%i&set js=%%j) else (
  9.       for /f "tokens=1-3 delims=.\-/ " %%a in ("!date!") do (
  10.          if %%a%%b%%c gtr %%i (set/a qs=xx,js=%%a%%b%%c) else (
  11.             set/a qs=%%a%%b%%c,js=%%i
  12. ))))
  13. for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do set/a n+=1&set/a yue!n!=%%a
  14. set /a qsd=100%qs:~4,2%%%100,qsm=100%qs:~6,2%%%100
  15. set /a yuq=qsd,yuh=12,mq=qsm,mh=yue!qsd!
  16. (
  17. echo 起始日期 %qs:~0,4%-%qs:~4,2%-%qs:~6,2%
  18. echo 结束日期 %js:~0,4%-%js:~4,2%-%js:~6,2%
  19. for /l %%i in (%qs:~0,4% 1 %js:~0,4%) do (
  20.     if %%i equ %js:~0,4% set /a yuh=100%js:~4,2%%%100&set flag=a
  21.     for /l %%j in (!yuq! 1 !yuh!) do (
  22.        if %%j equ 2 (
  23.           set /a yue2="^!(%%i%%4)&^!(^!(%%i%%100))|^!(%%i%%400)"+28,mh=yue2
  24.         ) else set /a mh=yue%%j
  25.        if defined flag if %%j equ !yuh! set /a mh=100!js:~-2!%%100
  26.        for /l %%k in (!mq! 1 !mh!) do (
  27.           set numd=0%%j&set "numm=0%%k"
  28.           echo %%i!numd:~-2!!numm:~-2!
  29.         )
  30.        set /a mq=1&echo;
  31.      )
  32.      set yuq=1
  33. )
  34. echo 耗时:
  35. echo %t%
  36. echo !time!
  37. )>c.txt
  38. start c.txt
  39. exit
复制代码

[ 本帖最后由 FOR 于 2010-4-7 23:22 编辑 ]

TOP

输出格式已改,但对系统日期作统一处理不会。

TOP

改成了 echo !time! 发现把输出格式改了后,多运行了一句set numd=0%%j&set "numm=0%%k" 速度居然到了3秒多

TOP

提速,100 个日期 只需 1.81 秒
  1. @echo off&setlocal enabledelayedexpansion
  2. set t=%time%
  3. echo 请输入8位数的起始日期和结束日期用空格分开
  4. echo 或只输入结束(开始)日期,默认当前日期为起始(结束)日期
  5. echo 输入格式 20080205 21080529&echo.
  6. set xx=19100201
  7. for /f "tokens=1,2" %%i in ("%xx%") do (
  8.    if not "%%j"=="" (set qs=%%i&set js=%%j) else (
  9.       for /f "tokens=1-3 delims=.\-/ " %%a in ("!date!") do (
  10.          if %%a%%b%%c gtr %%i (set/a qs=xx,js=%%a%%b%%c) else (
  11.             set/a qs=%%a%%b%%c,js=%%i
  12. ))))
  13. for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do set/a n+=1&set/a yue!n!=%%a
  14. set /a qsd=100%qs:~4,2%%%100,qsm=100%qs:~6,2%%%100
  15. set /a yuq=qsd,yuh=12,mq=qsm,mh=yue!qsd!
  16. echo 起始日期 %qs:~0,4%-%qs:~4,2%-%qs:~6,2%
  17. echo 结束日期 %js:~0,4%-%js:~4,2%-%js:~6,2%
  18. for /l %%i in (1 1 31) do set .%%i=0%%i&set ".%%i=!.%%i:~-2!"
  19. (
  20. for /l %%i in (%qs:~0,4% 1 %js:~0,4%) do (
  21.     set /a yue2="^!(%%i%%4)&^!(^!(%%i%%100))|^!(%%i%%400)"+28
  22.     if %%i equ %js:~0,4% set /a yuh=100%js:~4,2%%%100&set flag=a
  23.     for /l %%j in (!yuq! 1 !yuh!) do (
  24.        set /a mh=yue%%j
  25.        if defined flag if %%j equ !yuh! set /a mh=100!js:~-2!%%100
  26.        for /l %%k in (!mq! 1 !mh!) do echo %%i!.%%j!!.%%k!
  27.        set /a mq=1&echo;
  28.      )
  29.      set yuq=1
  30. )
  31. )>c.txt
  32. pause
复制代码

TOP

继续提速,减少for循环内代码运行的次数,效率略有提高,测试100个日期耗时1.66秒左右

  1. @echo off&setlocal enabledelayedexpansion
  2. set t=%time%
  3. echo 请输入8位数的起始日期和结束日期用空格分开
  4. echo 或只输入结束(开始)日期,默认当前日期为起始(结束)日期
  5. echo 输入格式 20080205 21080529&echo.
  6. set xx=19100201
  7. for /f "tokens=1,2" %%i in ("%xx%") do (
  8.    if not "%%j"=="" (set qs=%%i&set js=%%j) else (
  9.       for /f "tokens=1-3 delims=.\-/ " %%a in ("!date!") do (
  10.          if %%a%%b%%c gtr %%i (set/a qs=xx,js=%%a%%b%%c) else (
  11.             set/a qs=%%a%%b%%c,js=%%i
  12. ))))
  13. for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do set/a n+=1&set/a yue!n!=%%a
  14. set /a qsd=100%qs:~4,2%%%100,qsm=100%qs:~6,2%%%100
  15. set /a yuq=qsd,yuh=12,mq=qsm,mh=yue!qsd!
  16. for /l %%i in (1 1 31) do set .%%i=0%%i&set ".%%i=!.%%i:~-2!"
  17. set /a a=100!js:~4,2!%%100,b=100!js:~-2!%%100
  18. set #2010!a!=!js:~0,4!&set yue!js:~0,4!!a!=!b!
  19. set _!js:~0,4!=!a!&set yuh!a!=!a!
  20. echo 起始日期 %qs:~0,4%-%qs:~4,2%-%qs:~6,2%
  21. echo 结束日期 %js:~0,4%-%js:~4,2%-%js:~6,2%
  22. (for /l %%i in (%qs:~0,4% 1 %js:~0,4%) do (
  23.     set /a yue2="^!(%%i%%4)&^!(^!(%%i%%100))|^!(%%i%%400)"+28,yuh=yuh!_%%i!
  24.     for /l %%j in (!yuq! 1 !yuh!) do (
  25.        set /a mh=yue!#%%i%%j!%%j
  26.        for /l %%k in (!mq! 1 !mh!) do echo %%i!.%%j!!.%%k!
  27.        set mq=1
  28.      )
  29.      set yuq=1
  30. ))>c.txt
  31. pause
复制代码

[ 本帖最后由 FOR 于 2010-4-8 15:06 编辑 ]
1

评分人数

TOP

返回列表