![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 08:59 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [分享]批处理日历 |
| 可打印版本 2,744 / 11 |
| 第1楼 huanbei | 发表于 2008-11-05 21:29 |
| 初级用户 发帖 14 积分 32 | |
|
[分享]批处理日历 大家好,这里学习DOS和batch真是个不错的好地方。
我一直想找个dos下CAL命令,类似于linux下的cal。 后来再这里发现了批处理日历http://www.cn-dos.net/forum/viewthread.php?tid=27739&fpage=1&highlight=%E6%97%A5%E5%8E%86&page=1这个帖子,用电脑也很久了,现在想稍微了解一下batch,正是通过这篇文章了解了xp下batch。感谢huzixuan和my3439955,一边学习代码一边消化,花了我几天的时间——发现真笨,现在自己改写了那篇文章的部分代码,原因如下: 1. 代码中有个临时文件,我觉得不爽。 2. 目前通用的日历排序是:日、一、二、三、四、五、六 3. 学习嘛,所以看看自己能否看懂,在这过程中不知不觉就改了 为什么想找一个cal命令呢,是因为我通常用USER登陆xp的,系统中自带的小日历只能是管理员才可打开(更改),这样让我很郁闷。 有错误的地方,请大家指正。 代码如下: 程序有错,自己更正了一下。 [ Last edited by huanbei on 2008-11-6 at 00:53 ] |
|
| 第2楼 yishanju | 发表于 2008-11-05 22:14 |
| 银牌会员 发帖 1,357 积分 1,488 | |
|
网上不是有网页版的日历嘛
干嘛要找命令的。 |
|
| 第3楼 yishanju | 发表于 2008-11-05 22:21 |
| 银牌会员 发帖 1,357 积分 1,488 | |
| 第4楼 huanbei | 发表于 2008-11-05 23:04 |
| 初级用户 发帖 14 积分 32 | |
Originally posted by yishanju at 2008-11-5 22:14: 1. 学习DOS batch 2. 命令版的很有用,如果你的工作环境不能上网呢,并且非管理用户 3. 其短小精悍 4. 我们不是有Windows吗?干嘛用DOS?:) |
|
| 第5楼 HAT | 发表于 2008-11-06 00:58 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 2楼 在批处理室说这样的话,让人感觉很奇怪^_^
|
|
| 第6楼 BC | 发表于 2008-11-06 13:22 |
| 中级用户 发帖 175 积分 338 | |
|
有个疑问,为什么不在最后加个pause呢...
|
|
| 第7楼 huanbei | 发表于 2008-11-06 19:00 |
| 初级用户 发帖 14 积分 32 | |
Originally posted by BC at 2008-11-6 13:22: 让程序自动返回DOS命令符不好吗? 我是看到原来的程序中最后用了pause>nul,但是相对于本程序而言,这样有什么实际的作用呢?显示结束后,要回到提示符还要再按一下空格。 |
|
| 第8楼 BC | 发表于 2008-11-06 21:35 |
| 中级用户 发帖 175 积分 338 | |
|
哦...原来如此,请兄原谅我的鲁莽.要是搞个dos兼容的就好看了...
|
|
| 第9楼 huanbei | 发表于 2008-11-06 21:59 |
| 初级用户 发帖 14 积分 32 | |
|
刚才读了批处理参数问题一点谈
http://www.cn-dos.net/forum/viewthread.php?tid=17785&fpage=1&highlight=%E5%8F%82%E6%95%B0学习了一下。 为日历加入了参数。效果如下: ![]() 新代码如下: |
|
| 第10楼 huanbei | 发表于 2008-11-06 22:04 |
| 初级用户 发帖 14 积分 32 | |
|
发现那篇帖子讨论的真深啊,真佩服无奈何、willsort版主的钻研精神,从中现学现用。
|
|
| 第11楼 ucdos12 | 发表于 2008-11-07 15:13 |
| 新手上路 发帖 11 积分 11 | |
|
不错,收藏使用
|
|
| 第12楼 yyyyyyyyy | 发表于 2008-11-07 20:27 |
| 初级用户 发帖 85 积分 137 | |
|
润色了一下,增强了:
避免有好事者输英文 默认一月 @echo off setlocal enabledelayedexpansion :::::加入batch参数功能 set year=%~1 set m=%~2 set /a year1=!year!+1-1 set /a m1=!m!+1-1 if not "!year!"=="!year1!" goto help if not "!m!"=="!m!" goto help if not defined m ( if not defined year ( goto :help ) else ( set m=1 goto :main ) ) :help @echo 输入格式: @echo cal year month @echo 例:cal 2008 10 @echo 如未输入月份,则默认为1月 exit /b :main :::::::::::定义s1~s12,为每个月的天数 for %%b in (31,28,31,30,31,30,31,31,30,31,30,31) do ( set /a y+=1 set s!y!=%%b ) :::::::::::判断输入年份是否为闰年,更改2月的天数 set /a year_chk1=year%%400 set /a year_chk2=year%%4 set /a year_chk3=year%%100 if %year_chk1% equ 0 set s2=29 if %year_chk2% equ 0 if %year_chk3% neq 0 set s2=29 ::::::::::输入月份,并计算当年的第一天到上月月底的天数 set n=%m% set /a n-=1 for /l %%c in (1,1,%n%) do ( set /a day+=!s%%c!) ::::::::::判断这一年的第一天是星期几?再判断所要查询月份的第一天是星期几? set /a yearflag=(%year%+(%year%-1)/4-(%year%-1)/100+(%year%-1)/400)%%7 if %m%==1 (set monthflag=%yearflag% ) else (set /a monthflag=%yearflag%+!day!%%7 ) if %monthflag% geq 7 (set /a monthflag-=7) echo. echo. echo %year% %m% echo. echo. echo 日 一 二 三 四 五 六 :::::::::输入月份1号前的空日期 for /l %%d in (1,1,%monthflag%) do ( set /p= <nul) :::::::::找出要换行的日期(第一个,后每7个一换),显示当月日期并换行 set /a cl=7-%monthflag% for /l %%e in (1 1 !s%m%!) do ( if %%e lss 10 (set /p= %%e<nul) else (set /p= %%e<nul) if %%e==!cl! (echo.&set /a cl+=7) ) echo. |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |