标题: 批处理日历
[打印本页]
作者: huzixuan
时间: 2007-2-17 00:00
标题: 批处理日历
就要过年了,小弟将日历献上.,有更好更方便更简洁的方法请讨论一下.
代码中有不妥之处请大家踊跃批评............
祝:新年快乐,万事如意. 猪年诸事行大运!!
@echo off
mode con: lines=12 cols=40
setlocal enabledelayedexpansion
for %%a in (一,二,三,四,五,六,日) do (
set /a a+=1
set j!a!=%%a)
for %%b in (31,28,31,30,31,30,31,31,30,31,30,31) do (
set /a y+=1
set s!y!=%%b)
set /p m=查几月?
cls
set n=%m%
set /a n-=1
for /l %%c in (1,1,%n%) do (
set /a day+=!s%%c!)
set b=0
for /l %%d in (1,1,!day!) do (
set /a b+=1
if !b! equ 8 set b=1)
if %m% equ 1 set b=7
echo 一 二 三 四 五 六 日
echo.
set flag= 一二三四五六日一二三四五六日
for /l %%f in (1 1 13) do (
if "!flag:~%%f,1!"=="!j%b%!" (
if "!j%%f!"=="一" (set /p s= <nul&set zh=6&goto next)
if "!j%%f!"=="二" (set /p s= <nul&set zh=5&goto next)
if "!j%%f!"=="三" (set /p s= <nul&set zh=4&goto next)
if "!j%%f!"=="四" (set /p s= <nul&set zh=3&goto next)
if "!j%%f!"=="五" (set /p s= <nul&set zh=2&goto next)
if "!j%%f!"=="六" (set /p s= <nul&set zh=1&goto next)
if "!j%%f!"=="日" (set /p s=<nul&set zh=7&goto next)
))
:next
for /l %%e in (1 1 !s%m%!) do (
set /a b+=1
if !b! equ 8 set b=1
if %%e lss 10 (set /p= %%e<nul) else (set /p= %%e<nul)
if !fl!==0 (set /a z+=1)
if !z!==7 (echo.&set z=0)
if %%e==!zh! (echo.
set fl=0
)
)
pause>nul
[
Last edited by huzixuan on 2007-2-21 at 10:49 PM ]
作者: jmz573515
时间: 2007-2-17 00:12
加上几几年的就更完美了...
作者: huzixuan
时间: 2007-2-17 00:17
因本人尚处于学飞阶段,还无法实现更复杂的功能,因此还需兄们的帮助才可以完成.
作者: slore
时间: 2007-2-17 00:42
for %%b in (31,28,31,30,31,30,31,31,30,31,30,31) do (
2月一定是28天?
作者: huzixuan
时间: 2007-2-17 00:59
07年的不是吗;) 并且确实想写一个N年通用的,不会呢....
[
Last edited by huzixuan on 2007-2-17 at 01:00 AM ]
作者: xycoordinate
时间: 2007-2-17 01:33
set j!a!=%%a
set s!y!=%%b
set /a day+=!s%%c!
for /l %%d in (1,1,!day!) do (
set /a b+=1
if !b! equ 8 set b=1)
以上的几行中的“!”代表什么意思???
作者: huzixuan
时间: 2007-2-17 04:19
天那,我可怜的小日历还没有得到更多人的鼓励就已经沉入海底了.....
作者: gne3
时间: 2007-2-17 05:20
顶你了
作者: huzixuan
时间: 2007-2-17 06:16
谢谢。.呵呵
作者: huzixuan
时间: 2007-2-17 23:13
感谢 兄的鼓励,特别感谢 redtek 兄,虽然没有露面,但我知道兄一直都是在帮助我们的
作者: juventusryp
时间: 2007-2-19 09:25
set j!a!=%%a
这句不是很明白,不知道LZ可否解释一下
作者: xycoordinate
时间: 2007-2-20 00:01
Quote: |
Originally posted by juventusryp at 2007-2-18 08:25 PM:
set j!a!=%%a
这句不是很明白,不知道LZ可否解释一下 |
|
在大家的帮助下,终于知道了!!!
setlocal enabledelayedexpansion
set /?
Quote: |
......
考虑到读取一行文本时所遇到的目前扩充的限制时,延迟环境
变量扩充是很有用的,而不是执行的时候。以下例子说明直接
变量扩充的问题:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "%VAR%" == "after" @echo If you see this, it worked
)
不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中
的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个
复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和
"after",这两者永远不会相等。同样,以下这个例子也不会达到
预期效果:
set LIST=
for %i in (*.txt) do set LIST=%LIST% %i
echo %LIST%
原因是,它不会在目前的目录中建立一个文件列表,而只是将
LIST 变量设成找到的最后一个文件。这也是因为 %LIST% 在
FOR 语句被读取时,只被扩充了一次;而且,那时的 LIST 变量
是空的。因此,我们真正执行的 FOR 循环是:
for %i in (*) do set LIST= %i
这个循环继续将 LIST 设成找到的最后一个文件。
延迟环境变量扩充允许您使用一个不同的字符(惊叹号)在执行
时间扩充环境变量。如果延迟的变量扩充被启用,可以将上面
例子写成以下所示,以达到预期效果:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*.txt) do set LIST=!LIST! %i
echo %LIST%
...... |
|
作者: pxcok
时间: 2007-2-20 05:00
帮你顶一下
作者: huzixuan
时间: 2007-2-20 05:13
13楼的兄弟 解释的好清楚.我一直都是这么用,但却说不清楚这到底是什么意思呢!
作者: huzixuan
时间: 2007-2-21 07:45
得到斑竹的鼓励 真是一件令人兴奋的事.!
作者: gne3
时间: 2007-2-21 09:03
12楼兄说的,我看的晕乎乎的。呵呵呵
作者: mmyy525
时间: 2007-3-5 00:33
顶一下!
作者: tyh
时间: 2007-4-24 10:28
不错.不过没看懂.呵呵
作者: wudixin96
时间: 2007-4-24 10:39
写得真不错啊。
作者: my3439955
时间: 2007-4-24 11:01
支持楼主增加对任意年份日期查询的功能
相信知道了一年的第一天是星期几的话
这个功能就可以实现了
对于任意的年year
第一天是周几的计算公式为
(year+(year-1)/4-(year-1)/100+(year-1)/400)%7
注意这里的格式"/"为除法,不就余数,"%"为取余操作,只要余数
今年是2007年,那么第一天可计算得到为星期一
作者: my3439955
时间: 2007-4-24 12:36
通过在楼住的代码中新加代码,可以显示不同年份了
除了公元前估计都没有问题
所有改动均在注释之内,其余部分未做改动
@echo off
mode con: lines=12 cols=40
setlocal enabledelayedexpansion
for %%a in (一,二,三,四,五,六,日) do (
set /a a+=1
set j!a!=%%a)
for %%b in (31,28,31,30,31,30,31,31,30,31,30,31) do (
set /a y+=1
set s!y!=%%b)
::::::::::::::::::::::::::::::加入年功能
set /p year=查几年?
cls
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 /p m=查几月?
cls
set n=%m%
set /a n-=1
for /l %%c in (1,1,%n%) do (
set /a day+=!s%%c!)
set b=0
for /l %%d in (1,1,!day!) do (
set /a b+=1
if !b! equ 8 set b=1)
if %m% equ 1 set b=7
echo 一 二 三 四 五 六 日
echo.
set flag= 一二三四五六日一二三四五六日
:::::::::::::::::::::::::::::::::加入年功能
set /a yearflag=(%year%+(%year%-1)/4-(%year%-1)/100+(%year%-1)/400)%%7
if %yearflag% equ 1 goto endadjust
if %yearflag% equ 0 set yearflag=7
set /a yearflag-=1
set /a yeartemp=0-yearflag
set flag= !flag:~%yeartemp%!一二三四五六日一二三四五六日
set flag=!flag:~0,15!
echo %flag%>C:\ag.txt
:endAdjust
:::::::::::::::::::::::::::::::::加入结束
for /l %%f in (1 1 13) do (
if "!flag:~%%f,1!"=="!j%b%!" (
if "!j%%f!"=="一" (set /p s= <nul&set zh=6&goto next)
if "!j%%f!"=="二" (set /p s= <nul&set zh=5&goto next)
if "!j%%f!"=="三" (set /p s= <nul&set zh=4&goto next)
if "!j%%f!"=="四" (set /p s= <nul&set zh=3&goto next)
if "!j%%f!"=="五" (set /p s= <nul&set zh=2&goto next)
if "!j%%f!"=="六" (set /p s= <nul&set zh=1&goto next)
if "!j%%f!"=="日" (set /p s=<nul&set zh=7&goto next)
))
:next
for /l %%e in (1 1 !s%m%!) do (
set /a b+=1
if !b! equ 8 set b=1
if %%e lss 10 (set /p= %%e<nul) else (set /p= %%e<nul)
if !fl!==0 (set /a z+=1)
if !z!==7 (echo.&set z=0)
if %%e==!zh! (echo.
set fl=0
)
)
pause>nul
[
Last edited by my3439955 on 2007-4-24 at 12:39 PM ]
作者: lixiaodong789
时间: 2007-5-4 18:39
hao
作者: yeke
时间: 2007-5-4 20:51
顶你了
作者: sack
时间: 2007-5-14 04:48
标题: 真是高手啊!
我现在才发现我很菜