[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] [分享]批处理专为2013年制作的月历

本帖最后由 batsealine 于 2013-2-26 20:16 编辑
  1. ::这个东西写了我好几天,对刚入门不久的我来说,算得上是我的呕心沥血之作了,当然只是对自己来说。
  2. ::现在这个批处理只对2013年2月10日到12月31的日期有保障,原本打算的是让它支持从2013年1月1日到该年农历尾的。可节日问题非常之困扰人,而且只为这阴阳历不同步的几个月来增加许多判断、代码,感觉不太值。所以希望大家能想出更巧妙的方法,或者为其加上一些创意,还希望有人能为它再精减精减。
  3. ::最后是用法举例:  n1 -----查寻农历正月,n1 3  ------查寻农历正月初三;3 ------查寻阳历三月,3 3  -------查寻阳历三月初三
  4. @echo off&&mode con cols=65 lines=25 & SetLocal EnableDelayedExpansion
  5. set p1=%date:~5,2%& set p2=%date:~8,2%
  6. for /l %%a in (1,1,2) do (for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i)
  7. set y=2013&set l_y=2013&set m=%p1%&set d=%p2%&set p1=&set p2=
  8. ::不变变量
  9. set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊
  10. set tg=庚辛壬癸甲乙丙丁戊己
  11. set dz=申酉戌亥子丑寅卯辰巳午未n
  12. for %%l in (初一 初二 初三 初四 初五 初六 初七 初八 初九 初十 十一 十二 十三 十四 十五 十六 十七 十八 十九 二十 廿一 廿二 廿三 廿四 廿五 廿六 廿七 廿八 廿九 三十) do set /a a+=1 & set l_d!a!=%%l
  13. for %%l in (正 二 三 四 五 六 七 八 九 十 冬 腊) do set /a b+=1 & set l_m!b!=%%l
  14. for /f "skip=135 tokens=1,*" %%i in (%~df0) do ( set /a c+=1 & set fest%%i!c!=%%j)
  15. set a=&set c=&set b=
  16. :yl to nl
  17. cls
  18. for /f "tokens=%m%" %%i in ("0 31 59 90 120 151 181 212 243 273 304 334 365") do set /a number=%%i+%d%-40
  19. if %number% gtr 0 (
  20.     for %%l in (0 30 59 89 118 148 178 207 237 266 296 325 355) do if %%l lss %number% set /a l_d=%number%-%%l, l_m+=1
  21.     ) else (
  22.     set /a l_y=!l_y!-1, number=!number!+40
  23.     if !number! leq 11 set l_m=11&set /a l_d=!number!+19
  24.     if !number! gtr 11 set l_m=12&set /a l_d=!number!-11
  25.   )
  26. set number=
  27. ::-------------- %l_y% %l_m% %l_d%--------------------------------
  28. goto :first
  29. :nl to yl
  30. cls
  31. ::计算这是阳历的第几天
  32. for /f "tokens=%l_m%" %%i in ("0 30 59 89 118 148 178 207 237 266 296 325 355") do set /a number=%%i+%l_d%+40
  33. ::得阳历日期
  34. for %%l in (0 31 59 90 120 151 181 212 243 273 304 334 365) do if %%l lss %number% set /a d=%number%-%%l, m+=1
  35. if %m% gtr 12 set /a y+=1, m-=12
  36. set number=
  37. ::-------------- %y% %m% %d%--------------------------------
  38. :first
  39. ::*************************************************壹:日期、生肖、节日***************************************************
  40. call,set a=%%l_m%l_m%%%
  41. call,set b=%%l_d%l_d%%%
  42. if %m%==1 set m=01
  43. for /f "tokens=1,2,* delims== " %%l in ('if %y% equ 2013 set fest%m% 2^>nul^|findstr "\<%d%\>"^&if %l_y% equ 2013 set fest%a% 2^>nul^|findstr "%b%"') do (set fest=!fest! %%n)
  44. set a=&set b=
  45. for /f "tokens=%m%" %%i in ("0 31 59 90 120 151 181 212 243 273 304 334 365") do set /a number=%%i+%d%
  46. set /a ncwu=(number-55)/7+1&set number=
  47. if %m%==01 set m=1
  48. if not defined fest (echo. &call,echo                 第%ncwu%周    %m%月%d%日     %%l_m%l_m%%%月%%l_d%l_d%%%) else echo. &call,echo           第%ncwu%周    %m%月%d%日     %%l_m%l_m%%%月%%l_d%l_d%%%     ***%fest% ***
  49. set fest=
  50. echo.
  51. if %y% equ 2014 goto :nlrl
  52. ::**************************************************贰:  阳历月历********************************************************
  53. :: 计算每个月的天数
  54. for /f "tokens=%m%" %%i in ("31 28 31 30 31 30 31 31 30 31 30 31") do set a_m=%%i
  55. :: 计算当月一号的星期数
  56. if %m% leq 2 (set /a y-=1& set /a m+=12)
  57. set /a w1=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
  58. if %m% gtr 12 (set /a y+=1, m-=12)
  59. set code=天一二三四五六
  60. set spe=[--------------------------------------------------------]
  61. echo      星期天  星期一  星期二  星期三  星期四  星期五  星期六
  62. if %m% equ 1 set m=01
  63. for /f "tokens=1,2,3 delims== " %%i in ('set fest%m% 2^>nul') do (set /a aa+=1 & set fest!aa!0=%%j& set fest!aa!1=%%k)
  64. if %m% equ 01 set m=1
  65. :yueli
  66. set /a a+=1
  67. if %w1% equ 7 set w1=0
  68. set /a b=(w1+a-1)%%7
  69. call,set week=星期%%code:~!b!,1%%
  70. if "%a:~1,1%"=="" set a= %a%
  71. if %d%==%a% (set str=%str%    ★★)else set str=%str%    %a%日
  72. ::节日
  73. for /l %%l in (1 1 %aa%) do (if %str:~-3,-1%==!fest%%l0! set str=%str:~0,-3%!fest%%l1!)
  74. if %a% equ 1 if %w1% lss 7 for /l %%i in (1 1 %w1%) do set str=        !str!
  75. if %a% lss %a_m% if "!week!"=="星期六" echo    %spe%&echo   %str%&set str=
  76. if %a% equ %a_m% echo    %spe%&echo   %str%&echo    %spe%&set str=
  77. if %a% lss %a_m% goto :yueli
  78. set code=&set a=&set b=&set aa=
  79. echo.
  80. :nlrl
  81. ::********************************************叁:农历月历*************************************************************
  82. for /f "tokens=%l_m%" %%i in ("30 29 30 29 30 30 29 30 29 30 30 30") do set l_a_m=%%i
  83. call,set a=%%l_m%l_m%%%
  84. call,set b=%%l_d%l_d%%%
  85. for /f "tokens=1,2,3 delims== " %%i in ('set fest%a% 2^>nul') do (set /a aa+=1 & set l_fest!aa!0=%%j& set l_fest!aa!1=%%k)
  86. if %l_y%==2012  goto :end
  87. :l_yueli
  88. set /a i+=1
  89. if %i%==%l_d% (set str=!str!  ★★) else call,set str=%str%  %%l_d%i%%%
  90. for /l %%l in (1 1 %aa%) do (if %str:~-2%==!l_fest%%l0! set str=%str:~0,-3%*!l_fest%%l1!)
  91. set /a a=%i%%%10
  92. if %a% equ 0 echo  %str% & echo. & set str=
  93. if %l_a_m%==29 if %i%==29 echo  %str% & set str=
  94. if %l_a_m%==29 if %i% leq 28  goto :l_yueli
  95. if %i% leq 29 if %l_a_m%==30 goto :l_yueli
  96. set i=&set a=&set aa=
  97. :end
  98. ::*******************************************结尾:输入参数**************************************************************
  99. set m=&set d=&set l_m=&set l_d=&set fest=&set l_fest=&set l_y=2013&set y=2013
  100. set /p input=
  101. if not defined input exit
  102. for /f "tokens=1,2" %%i in ("%input%") do (
  103.     if %input:~,1%==n (
  104.         set l_m=%%i&set l_m=!l_m:~1!& set l_d=%%j
  105.         if not defined l_d set l_d=1
  106.         goto :nl to yl
  107.       ) else if %input:~,1%==y (
  108.         set year=%%i&set year=!year:~1!
  109.         goto :year
  110.       ) else (
  111.         set m=%%i&set d=%%j
  112.         if not defined d set d=1
  113.         goto :yl to nl
  114.     )
  115.   )
  116. 正 初九 雨水
  117. 正 廿四 惊蛰
  118. 二 初九 春分
  119. 二 廿四 清明
  120. 三 十一 谷雨
  121. 三 廿六 立夏
  122. 四 十二 小满
  123. 四 廿七 芒种
  124. 五 十四 夏至
  125. 五 三十 小暑
  126. 六 十五 大暑
  127. 七 初一 立秋
  128. 七 十七 处暑
  129. 八 初三 白露
  130. 八 十九 秋分
  131. 九 初四 寒露
  132. 九 十九 霜降
  133. 十 初五 立冬
  134. 十 二十 小雪
  135. 冬 初五 大雪
  136. 冬 二十 冬至
  137. 腊 初五 小寒
  138. 腊 二十 大寒
  139. 八 十五 中秋
  140. 01 1 元旦
  141. ;只有1月的节日才加0,为的是不与10、11、12月的节日相冲突
  142. 2 14 情人
  143. 3 8 妇女
  144. 4 1 愚人
  145. 5 4 青年
  146. 9 10 教师
  147. 10 1 国庆
  148. 12 25 圣诞
复制代码

返回列表