本帖最后由 batsealine 于 2013-2-26 20:16 编辑
- ::这个东西写了我好几天,对刚入门不久的我来说,算得上是我的呕心沥血之作了,当然只是对自己来说。
- ::现在这个批处理只对2013年2月10日到12月31的日期有保障,原本打算的是让它支持从2013年1月1日到该年农历尾的。可节日问题非常之困扰人,而且只为这阴阳历不同步的几个月来增加许多判断、代码,感觉不太值。所以希望大家能想出更巧妙的方法,或者为其加上一些创意,还希望有人能为它再精减精减。
- ::最后是用法举例: n1 -----查寻农历正月,n1 3 ------查寻农历正月初三;3 ------查寻阳历三月,3 3 -------查寻阳历三月初三
-
- @echo off&&mode con cols=65 lines=25 & SetLocal EnableDelayedExpansion
- set p1=%date:~5,2%& set p2=%date:~8,2%
- for /l %%a in (1,1,2) do (for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i)
- set y=2013&set l_y=2013&set m=%p1%&set d=%p2%&set p1=&set p2=
-
- ::不变变量
- set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊
- set tg=庚辛壬癸甲乙丙丁戊己
- set dz=申酉戌亥子丑寅卯辰巳午未n
- for %%l in (初一 初二 初三 初四 初五 初六 初七 初八 初九 初十 十一 十二 十三 十四 十五 十六 十七 十八 十九 二十 廿一 廿二 廿三 廿四 廿五 廿六 廿七 廿八 廿九 三十) do set /a a+=1 & set l_d!a!=%%l
- for %%l in (正 二 三 四 五 六 七 八 九 十 冬 腊) do set /a b+=1 & set l_m!b!=%%l
- for /f "skip=135 tokens=1,*" %%i in (%~df0) do ( set /a c+=1 & set fest%%i!c!=%%j)
- set a=&set c=&set b=
-
-
- :yl to nl
- cls
- 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
- if %number% gtr 0 (
- 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
- ) else (
- set /a l_y=!l_y!-1, number=!number!+40
- if !number! leq 11 set l_m=11&set /a l_d=!number!+19
- if !number! gtr 11 set l_m=12&set /a l_d=!number!-11
- )
- set number=
- ::-------------- %l_y% %l_m% %l_d%--------------------------------
- goto :first
- :nl to yl
- cls
- ::计算这是阳历的第几天
- 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
- ::得阳历日期
- 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
- if %m% gtr 12 set /a y+=1, m-=12
- set number=
- ::-------------- %y% %m% %d%--------------------------------
-
-
- :first
- ::*************************************************壹:日期、生肖、节日***************************************************
- call,set a=%%l_m%l_m%%%
- call,set b=%%l_d%l_d%%%
- if %m%==1 set m=01
- 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)
- set a=&set b=
-
- 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%
- set /a ncwu=(number-55)/7+1&set number=
- if %m%==01 set m=1
- 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% ***
- set fest=
- echo.
-
-
-
-
- if %y% equ 2014 goto :nlrl
- ::**************************************************贰: 阳历月历********************************************************
- :: 计算每个月的天数
- for /f "tokens=%m%" %%i in ("31 28 31 30 31 30 31 31 30 31 30 31") do set a_m=%%i
- :: 计算当月一号的星期数
- if %m% leq 2 (set /a y-=1& set /a m+=12)
- set /a w1=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
- if %m% gtr 12 (set /a y+=1, m-=12)
- set code=天一二三四五六
- set spe=[--------------------------------------------------------]
- echo 星期天 星期一 星期二 星期三 星期四 星期五 星期六
- if %m% equ 1 set m=01
- 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)
- if %m% equ 01 set m=1
- :yueli
- set /a a+=1
- if %w1% equ 7 set w1=0
- set /a b=(w1+a-1)%%7
- call,set week=星期%%code:~!b!,1%%
- if "%a:~1,1%"=="" set a= %a%
- if %d%==%a% (set str=%str% ★★)else set str=%str% %a%日
- ::节日
- for /l %%l in (1 1 %aa%) do (if %str:~-3,-1%==!fest%%l0! set str=%str:~0,-3%!fest%%l1!)
- if %a% equ 1 if %w1% lss 7 for /l %%i in (1 1 %w1%) do set str= !str!
- if %a% lss %a_m% if "!week!"=="星期六" echo %spe%&echo %str%&set str=
- if %a% equ %a_m% echo %spe%&echo %str%&echo %spe%&set str=
- if %a% lss %a_m% goto :yueli
- set code=&set a=&set b=&set aa=
- echo.
-
-
-
- :nlrl
- ::********************************************叁:农历月历*************************************************************
- 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
- call,set a=%%l_m%l_m%%%
- call,set b=%%l_d%l_d%%%
- 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)
-
- if %l_y%==2012 goto :end
- :l_yueli
- set /a i+=1
- if %i%==%l_d% (set str=!str! ★★) else call,set str=%str% %%l_d%i%%%
- for /l %%l in (1 1 %aa%) do (if %str:~-2%==!l_fest%%l0! set str=%str:~0,-3%*!l_fest%%l1!)
-
- set /a a=%i%%%10
- if %a% equ 0 echo %str% & echo. & set str=
- if %l_a_m%==29 if %i%==29 echo %str% & set str=
- if %l_a_m%==29 if %i% leq 28 goto :l_yueli
- if %i% leq 29 if %l_a_m%==30 goto :l_yueli
- set i=&set a=&set aa=
-
-
- :end
- ::*******************************************结尾:输入参数**************************************************************
- set m=&set d=&set l_m=&set l_d=&set fest=&set l_fest=&set l_y=2013&set y=2013
- set /p input=
- if not defined input exit
- for /f "tokens=1,2" %%i in ("%input%") do (
- if %input:~,1%==n (
- set l_m=%%i&set l_m=!l_m:~1!& set l_d=%%j
- if not defined l_d set l_d=1
- goto :nl to yl
- ) else if %input:~,1%==y (
- set year=%%i&set year=!year:~1!
- goto :year
- ) else (
- set m=%%i&set d=%%j
- if not defined d set d=1
- goto :yl to nl
- )
- )
-
-
-
-
-
-
-
-
-
-
-
-
- 正 初九 雨水
- 正 廿四 惊蛰
- 二 初九 春分
- 二 廿四 清明
- 三 十一 谷雨
- 三 廿六 立夏
- 四 十二 小满
- 四 廿七 芒种
- 五 十四 夏至
- 五 三十 小暑
- 六 十五 大暑
- 七 初一 立秋
- 七 十七 处暑
- 八 初三 白露
- 八 十九 秋分
- 九 初四 寒露
- 九 十九 霜降
- 十 初五 立冬
- 十 二十 小雪
- 冬 初五 大雪
- 冬 二十 冬至
- 腊 初五 小寒
- 腊 二十 大寒
-
- 八 十五 中秋
-
- 01 1 元旦
- ;只有1月的节日才加0,为的是不与10、11、12月的节日相冲突
- 2 14 情人
- 3 8 妇女
- 4 1 愚人
- 5 4 青年
- 9 10 教师
- 10 1 国庆
- 12 25 圣诞
复制代码
|