中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]批处理版万年历(不断完善中)
« [1] [2] »
作者:
标题: [原创]批处理版万年历(不断完善中) 上一主题 | 下一主题
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『楼 主』:  [原创]批处理版万年历(不断完善中)

注:查询年月从1904年01月起,因农历无法用程序进行计算,因此暂无农历显示,本人将继续完善。
-----------------------------------
四楼为加强版
-----------------------------------
十五楼为最终修正版(更新日期2008年4月20日)
附件exe版:http://upload.cn-dos.net/img/248.rar
@echo off&color 9f&mode con lines=20
title 批处理版万年历
:begin
cls
echo.&echo.&echo.&echo.&echo.
set var=&set str=&set str1=&set str2=&set str3=&set n=0&set m=0&set v=0&set w=0
set /p var=请输入要查询的月份(格式为2000年08月):
if "%var:~4,1%%var:~7,1%"=="年月" goto year
cls
echo.&echo.&echo.&echo.&echo.
echo     输入格式不正确!请返回正确输入。&ping /n 3 127.1>nul&goto begin
:year
set year=%var:~,4%
set /a str=(%year%-1904)/4&set /a str1=%year%-1904
set /a a=%str1%-%str%*4
set str1=
:month
if %a% equ 0 (set /a number1=%str%*1461) else (set /a number1=%str%*1461+%a%*365+1)
if %var:~5,1% equ 0 (set month=%var:~6,1%) else (set month=%var:~5,2%)
if %month% equ 2 set n=28
if %a% equ 0 set n=29
for %%i in (1,3,5,7,8,10,12) do if "%%i"=="%month%" set n=31
for %%i in (4,6,9,11) do if "%%i"=="%month%" set n=30
set /a month=%month%-1
if %month% equ 0 set /a number2=0
if %month% equ 1 set /a number2=31
if %month% equ 2 set /a number2=31+28
if %month% equ 3 set /a number2=31*2+28
if %month% equ 4 set /a number2=31*2+30+28
if %month% equ 5 set /a number2=31*3+30+28
if %month% equ 6 set /a number2=31*3+30*2+28
if %month% equ 7 set /a number2=31*4+30*2+28
if %month% equ 8 set /a number2=31*5+30*2+28
if %month% equ 9 set /a number2=31*5+30*3+28
if %month% equ 10 set /a number2=31*6+30*3+28
if %month% equ 11 set /a number2=31*6+30*4+28
if %a% equ 0 set /a number2=%number2%+1
if %month% lss 2 set /a number2=%number2%-1
:day
cls
echo.&echo.&echo.&echo.&echo.
echo     [************************%var%**********************]
echo.
for /l %%i in (1,1,%n%) do (
    set day=%%i   
    call :week %%day%%
)
echo.&echo    本次查询完成,继续查询请按任意键,退出请关闭窗口。
pause>nul&goto begin
:week
set /a w+=1
set /a number=%number1%+%number2%+%1-1
set /a week=%number%/7
set /a b=%number%-%week%*7
set day=%day%日
call,set day=%day: =%
if not "%day:~2,1%"=="日" set day= %day%
set code=五六天一二三四
call,set code=星期%%code:~%b%,1%%
set str1=%str1%    %day%
set str2=%str2%  %code%
set /a v+=1&set /a m+=1
if %v% gtr 7 set str2=--------------------------------------------------------
if %m% gtr 6 set m=0&echo     ^|%str2%^|&echo     ^|%str1%^|&set str1=&set str2=
if %w% gtr 28 set str3=%str3%    %day%
if %w% equ %n% echo     ^|%str2%^|&echo     ^|%str3%&echo     ^|%str2%^|
goto :eof
[ Last edited by zw19750516 on 2008-4-20 at 09:40 AM ]

   此帖被 +7 点积分        点击查看详情   
评分人:【 plp626 分数: +6  时间:2008-4-7 23:41
评分人:【 gggqqv 分数: +1  时间:2008-4-8 09:44




批处理之家新域名:www.bathome.net
2008-4-7 00:48
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 2 楼』:  

农历的数据 曾经贴过
http://www.cn-dos.net/forum/view ... ;highlight=%2Bterse



简单!简单!再简单!
2008-4-7 01:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 3 楼』:  

不是有高人发帖说过吗?农历是天文学家根据历法推算出来的,没有现成的程序算法。就用2楼给的数据吧。

2008-4-7 06:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  再次加强(加入本月本日显示):

再加入窗口颜色变化并加入注解:
@echo off&mode con cols=65 lines=20
rem: 设置窗口标题
title 批处理版万年历
:begin
rem: 设置窗口随机颜色
set /a P=%random%%%15
if %p% equ 10 set p=a
if %p% equ 11 set p=b
if %p% equ 12 set p=c
if %p% equ 13 set p=d
if %p% equ 14 set p=e
color %p%f
cls
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
rem: 清空置0
set var=&set str=&set str1=&set str2=&set str3=&set n=0&set m=0&set v=0&set w=0
rem: 提取系统当日日期参数
set var=%date:~,4%年%date:~5,2%月
set /p var=输入要查询的月份(格式为2000年08月默认回车为本月):
rem: 判断输入格式
if "%var:~4,1%%var:~7,1%"=="年月" goto year
cls
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
echo            输入格式不正确!请返回正确输入。&ping /n 2 127.1>nul&goto begin
:year
rem: 提取输入的年份参数
set year=%var:~,4%
rem: 以四年为周期计算年余数
set /a str=(%year%-1904)/4&set /a str1=%year%-1904
set /a a=%str1%-%str%*4
set str1=
rem: 计算整年天数
if %a% equ 0 (set /a number1=%str%*1461) else (set /a number1=%str%*1461+%a%*365+1)
:month
rem: 提取输入的月份参数
if %var:~5,1% equ 0 (set month=%var:~6,1%) else (set month=%var:~5,2%)
rem: 计算输入月份的天数
if %month% equ 2 set n=28
if %a% equ 0 set n=29
for %%i in (1,3,5,7,8,10,12) do if "%%i"=="%month%" set n=31
for %%i in (4,6,9,11) do if "%%i"=="%month%" set n=30
set /a month=%month%-1
rem: 计算整月天数
if %month% equ 0 set /a number2=0
if %month% equ 1 set /a number2=31
if %month% equ 2 set /a number2=31+28
if %month% equ 3 set /a number2=31*2+28
if %month% equ 4 set /a number2=31*2+30+28
if %month% equ 5 set /a number2=31*3+30+28
if %month% equ 6 set /a number2=31*3+30*2+28
if %month% equ 7 set /a number2=31*4+30*2+28
if %month% equ 8 set /a number2=31*5+30*2+28
if %month% equ 9 set /a number2=31*5+30*3+28
if %month% equ 10 set /a number2=31*6+30*3+28
if %month% equ 11 set /a number2=31*6+30*4+28
if %a% equ 0 set /a number2=%number2%+1
if %month% lss 2 set /a number2=%number2%-1
set str=
:day
cls
echo.&echo.&echo.&echo.&echo.
echo    [***********************%var%***********************]
echo.
rem: 以当月天数为循环
for /l %%i in (1,1,%n%) do (
    set day=%%i   
    call :week %%day%%
)
echo.&echo    本次查询完成,继续查询请按任意键,退出请关闭窗口。
pause>nul&goto begin
:week
set /a v+=1&set /a m+=1
rem: 计算总天数
set /a number=%number1%+%number2%+%1-1
rem: 计算总星期数
set /a week=%number%/7
rem: 计算星期的余数
set /a b=%number%-%week%*7
if %day% lss 10 (set today=0%day%) else (set today=%day%)
set day=%day%日
call,set day=%day: =%
if not "%day:~2,1%"=="日" set day= %day%
rem: 判断如是本月刚将本日显示为五角星
if "%var:~,4%%var:~5,2%%today:~,2%"=="%date:~,4%%date:~5,2%%date:~8,2%" set day=   ★
rem: 根据星期余数推算为星期几
set code=五六天一二三四
call,set code=星期%%code:~%b%,1%%
rem: 变量累加(不输出)
set str=%str%    %day%
set str1=%str1%  %code%
rem: 设置输出条件并及时清空变量
if %v% gtr 7 set str1= [--------------------------------------------------------]
if %m% equ 7 set m=0&echo   %str1%&echo   %str%&set str=&set str1=
if %v% gtr 28 set str2=%str2%    %day%
if %v% equ %n% echo   %str1%&echo   %str2%&echo   %str1%&set str1=&set str2=
goto :eof
[ Last edited by zw19750516 on 2008-4-8 at 06:34 PM ]



批处理之家新域名:www.bathome.net
2008-4-7 23:16
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 5 楼』:  



  Quote:
'--]' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'--]' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'--]' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

直接回车

2008-4-7 23:21
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 6 楼』:  

输入格式太不灵活了

建议多几种输入格式吧

2008-4-7 23:23
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 7 楼』:  

不管怎样,我鼓励楼主发帖,

代码有不少地方需要改进,楼主继续,我给你加分



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-7 23:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xb2008chopin
初级用户





积分 24
发帖 11
注册 2008-4-6
状态 离线
『第 8 楼』:  

真的不错 新手我 学习了!

2008-4-8 03:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 9 楼』:  继续完善中:

就是工作太忙,没太多时间,但我会把它继续完善的。



批处理之家新域名:www.bathome.net
2008-4-8 09:06
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
BWSkyer
中级用户

我是DOS学者


积分 367
发帖 180
注册 2006-5-14
来自 重庆
状态 离线
『第 10 楼』:  

后面一个加强的,输入月份后查询不了, 代码我现在还有部分都看不懂



My blog:左铅右椠 上善若水
My team: 519创意团队
2008-4-8 10:19
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (309843581)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by BWSkyer at 2008-4-8 10:19:
后面一个加强的,输入月份后查询不了, 代码我现在还有部分都看不懂

输入格式为****年0*月,只输入*月是不行的,不会被认定为正确输入。



批处理之家新域名:www.bathome.net
2008-4-8 13:18
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by abcd at 2008-4-7 23:23:
输入格式太不灵活了

建议多几种输入格式吧

这样输入是为了计算中的认定的,随意输入将会导致计算过程出错。



批处理之家新域名:www.bathome.net
2008-4-8 13:18
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
BWSkyer
中级用户

我是DOS学者


积分 367
发帖 180
注册 2006-5-14
来自 重庆
状态 离线
『第 13 楼』:  

我是这样输入的哦~~~~



My blog:左铅右椠 上善若水
My team: 519创意团队
2008-4-8 13:23
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (309843581)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by BWSkyer at 2008-4-8 13:23:
我是这样输入的哦~~~~

满10位前面就不要加0了。
不知兄弟哪段看不懂,我可以解释下。

[ Last edited by zw19750516 on 2008-4-8 at 02:02 PM ]



批处理之家新域名:www.bathome.net
2008-4-8 13:55
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 15 楼』:  根据日常习惯再次修改(星期天显示在前):

-----------------------------------
继续修正了闰年月计算的错误以及当月1号为星期天首行排版不齐的问题,同时去除与亮白色字体不协调的窗口颜色。
-----------------------------------
于2008年4月20日再次简化代码和提高输入灵活性。
@@echo off&color 4f&mode con cols=65 lines=22
title 批处理版万年历
:begin
set /a P=%random%%%14
for %%i in (6,7,10,11,12) do if %%i equ %p% goto begin
if %p% equ 13 set p=d
color %p%f
cls
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
set var=&set str=&set str1=&set n=0&set m=0&set number2=0
set var=%date:~,7%
set /p var=输入要查询的月份(格式为2000-08默认回车为本月):
set /a month=100%var:~5%%%100
if "%var:~4,1%"=="-" if %month% leq 12 goto year
cls
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
echo            输入格式不正确!请返回正确输入。&ping /n 2 127.1>nul&goto begin
:year
set year=%var:~,4%
set /a str=(%year%-1904)/4,a=(%year%-1904)%%4
:month
if %a% equ 0 (set /a number1=%str%*1461) else (set /a number1=%str%*1461+%a%*365+1)
if %month% equ 2 (
   if %a% equ 0 (
                set n=29
                ) else (
                       set n=28
                       )
)
for %%i in (1,3,5,7,8,10,12) do if %%i equ %month% set n=31
for %%i in (4,6,9,11) do if %%i equ %month% set n=30
set /a month-=1
if %month% gtr 0 for /l %%a in (1,1,%month%) do call :loop %%a
if %month% gtr 2 (
   if %a% equ 0 (
                set /a number2+=29
                ) else (
                       set /a number2+=28
                       )
)
set str=
set /a month+=1
if %month% lss 10 set month=0%month%
:day
cls
echo.&echo.&echo.&echo.&echo.
echo    [***********************%year%年%month%月***********************]
set list=星期天  星期一  星期二  星期三  星期四  星期五  星期六            
echo.
echo      %list%
for /l %%i in (1,1,37) do (
    set day=%%i   
    call :week %%day%%
)
echo.&echo    本次查询完成,继续查询请按任意键,退出请关闭窗口。
pause>nul&goto begin
:week
set /a m+=1 ,number=%number1%+%number2%+%1-1
set /a b=%number%%%7
if %day% lss 10 (set today=0%day%) else (set today=%day%)
set day=%day%日
call,set day=%day: =%
if not "%day:~2,1%"=="日" set day= %day%
if "%var:~,4%%var:~5,2%%today:~,2%"=="%date:~,4%%date:~5,2%%date:~8,2%" set day=  ★
set code=五六天一二三四
call,set code=星期%%code:~%b%,1%%
set /a c=%b%+5
if %c% gtr 7 set /a c-=7
set str=%str%    %day%
if %m% lss 2 for /l %%i in (1,1,%c%) do call :lp
set str1=[--------------------------------------------------------]
if %m% lss %n% if "%code%"=="星期六" echo    %str1%&echo   %str%&set str=
if %m% equ %n% echo    %str1%&echo   %str%&echo    %str1%&set str=
goto :eof
:loop
for %%i in (1,3,5,7,8,10) do if %%i equ %1 set /a number2+=31
for %%i in (4,6,9,11) do if %%i equ %1 set /a number2+=30
goto :eof
:lp
if not "%code%"=="星期天" set str=        %str%
[ Last edited by zw19750516 on 2008-4-20 at 09:21 AM ]

   此帖被 +13 点积分       点击查看详情   
评分人:【 oilio 分数: +6  时间:2008-4-9 14:56
评分人:【 haiou327 分数: +6  时间:2008-4-9 18:42
评分人:【 zhitingkey 分数: +1  时间:2008-4-15 13:27




批处理之家新域名:www.bathome.net
2008-4-9 01:36
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: