|
andison625
初级用户
积分 70
发帖 36
注册 2008-5-21
状态 离线
|
『楼 主』:
[已结]关于日历竖向排班
大家好,我遇到麻烦事了,我需要作一个班表,是读取系统日期自动生成的。
我已经用批处理生成了一个和WIN系统日历一样的BAT,但我这个BAT他没有明确指明 当月日期和星期的关系。
他生成的表和WIN的一样,但我需要的班表,需要是竖向的日期
如下:
N年N月 | 上班时间一 |上班时间二 |上班时间三 | 上班时间四|
日期星期几 |名一 |名二 |名三 |名四 |
例:
2009年01月| 上班时间一 |上班时间二 |上班时间三 | 上班时间四|
01星期四 |名一 |名二 |名三 |名四 |
02星期五 |名二 |名三 |名四 |名一 |
03星期六 |名三 |名四 |名一 |名二 |
04星期日 |名四 |名一 |名二 |名三 |
。
。
。
。
31星期六 |名三 |名四 |名一 |名二 |
我要生成的是这样的表,直接读取机器的日期生成,方便查询
但我找到的是和WIN一样的日历,找不到日期和星期的关联。
请帮忙想一样,如何能把日期和星期关联在一起,按上边的格式打出
日期+星期,后边再打排班的名称
我改写成的日历表代码如下:
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
@echo off
setlocal enabledelayedexpansion
:::::::::::定义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=%DATE:~0,4%
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 /a m=%DATE:~5,2%
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 日 一 二 三 四 五 六
:::::::::输入月份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)
)
pause 自动日历出来了,就是不会把他写成我需要的方式。。
班表有四个人,还要把日期和班表的某一个人的名称关联在一起。
我就是在这里想了半天,没办法实现了。。
请大家帮帮忙。
[ Last edited by HAT on 2009-2-3 at 05:39 ]
|
|
2009-1-24 17:14 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
2 楼』:
@echo off
setlocal enabledelayedexpansion
:::::::::::定义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=%DATE:~0,4%
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 /a m=%DATE:~5,2%
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)
set weekday=日一二三四五六
set /a monthflag-=0
for /l %%e in (1 1 !s%m%!) do (
call set wd=星期%%weekday:~!monthflag!,1%%
if %%e lss 10 (Call echo 0%%e!wd!) else (Call echo %%e!wd!)
set /a monthflag+=1
set /a monthflag%%=7
)
pause
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-1-24 20:09 |
|
|
andison625
初级用户
积分 70
发帖 36
注册 2008-5-21
状态 离线
|
『第
3 楼』:
先谢谢楼上的生成了竖向日历
还是想不通,要怎样把名字和日期关联起来
我要 set workers=名字一名字二名字三名字四名字一名字二名字三
然后每次读取四个,在 %%e!wd! 后输出。
geq 4 超过时再读第一个名字
名字要怎样和时间关联起来呢?
[ Last edited by andison625 on 2009-1-28 at 11:20 ]
|
|
2009-1-28 11:19 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
4 楼』:
::名字重复一次,用作循环
set "names=|名一 |名二 |名三 |名四 |名一 |名二 |名三 |名四 "
. . .
::nn+15除60取余;具体排版自己改下,只提供方法
set /a nn=(nn+15)%%60
...%%e!wd!!names:~%nn%,60!
[ Last edited by netbenton on 2009-2-1 at 18:23 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-28 13:53 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
5 楼』:
这样试行不?
取一遍后 set 名字一=名字二 set 名字二=名字三。。。
|
简单!简单!再简单! |
|
2009-1-28 17:44 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
6 楼』:
参考
set weekday=日一二三四五六
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2009-1-28 19:56 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
7 楼』:
@echo off
set "xq=日一二三四五六"
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a Y=%%i,M=1%%j%%100,D=1%%k%%100,M1=M
set/a PN="!(Y%%4) & !(!(Y%%100)) | !(Y%%400)+28",n=0,_a=0,_b=1,_c=2,_d=3
echo %Y%年%M%月 ^|上班时间一^|上班时间二^|上班时间三^|上班时间四^|
for %%i in (名一 名二 名三 名四)do call set "_%%n%%=%%i"&set/a n+=1
if %M% leq 2 set/a Y-=1,M+=12
set/a W1=(1+2*M+3*(M+1)/5+Y+Y/4-Y/100+Y/400+1)%%7
for /F "tokens=%M1%" %%i in ("31 %PN% 31 30 31 30 31 31 30 31 30 31") do set/a W=w1+%%i-1
for /l %%j in (0 1 %w%) do (
if %%j geq %W1% (
set/a T=%%j%%7,DD+=1
call set D=0%%DD%%
call call echo %%D:~-2%% 星期%%%%xq:~%%t%%,1%%%% %%%%_%%_a%%%%%% %%%%_%%_b%%%%%% %%%%_%%_c%%%%%% %%%%_%%_d%%%%%%
set/a _a=^(_a+1^)%%4,_b=^(_b+1^)%%4,_c=^(_c+1^)%%4,_d=^(_d+1^)%%4
))
pause
此帖被 +2 点积分 点击查看详情 评分人:【 HAT 】 | 分数: +2 | 时间:2009-2-3 05:39 |
|
|
简单!简单!再简单! |
|
2009-1-28 21:58 |
|
|
andison625
初级用户
积分 70
发帖 36
注册 2008-5-21
状态 离线
|
『第
8 楼』:
谢谢各位了。。。
七楼的朋友,解决了名字输出的问题。
但还是没有把四个名字和日期关联起来。。
把日期改了一下,还是按自定义的名字,由第一个输出,
就等于每个月的班都一样了。。先谢谢了。。
|
|
2009-2-1 15:40 |
|
|
andison625
初级用户
积分 70
发帖 36
注册 2008-5-21
状态 离线
|
『第
9 楼』:
以前我用C++编日历时,是找到某一天,指定的日子,
例:2007-1-4 星期一,名一,
这样,把这些都关联在一起,然后算,某一个月的第一天,
和那天隔了多少天,再把这个数N,分别除 7,4,
这样,把后边的都一起算出来。
但我在批处理中缺少函数上的认识,不是很会设定这个关联。。
|
|
2009-2-1 15:49 |
|
|
andison625
初级用户
积分 70
发帖 36
注册 2008-5-21
状态 离线
|
『第
10 楼』:
基本上解决了。。。。
最后想要在每个名字前加 “|”
用于生成文本导入EXCEL。。。。
这个。。。我试过用 ^| 这样,不行,
下边是我改好后的代码,
请帮我改一下,
在名字前加多一个竖条。
@echo off
color f2
set "xq=日一二三四五六"
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a Y=%%i,M=1%%j%%100,D=1%%k%%100,M1=M
if %M% leq 2 set/a Y-=1,M+=12
set/a n1=(1+2*M+3*(M+1)/5+Y+Y/4-Y/100+Y/400+1)%%4
set/a PN="!(Y%%4) & !(!(Y%%100)) | !(Y%%400)+28",n=0,_a=0+n1,_b=1+n1,_c=2+n1,_d=3+n1
echo %Y%年%M%月 ^|08:30-17:30 ^|08:30-17:30 ^|17:30-21:00 ^| 休息 ^|
for %%i in (名字一 名字二 名字三 名字四 名字一 名字二 名字三)do call set "_%%n%%=%%i"&set/a n+=1
set/a W1=(1+2*M+3*(M+1)/5+Y+Y/4-Y/100+Y/400+1)%%7
for /F "tokens=%M1%" %%i in ("31 %PN% 31 30 31 30 31 31 30 31 30 31") do set/a W=w1+%%i-1
for /l %%j in (0 1 %w%) do (
if %%j geq %W1% (
set/a T=%%j%%7,DD+=1
call set D=0%%DD%%
call call echo %%D:~-2%% 星期%%%%xq:~%%t%%,1%%%% %%%%_%%_a%%%%%% %%%%_%%_b%%%%%% %%%%_%%_c%%%%%% %%%%_%%_d%%%%%%
set/a _a=^(_a+3^)%%4,_b=^(_b+3^)%%4,_c=^(_c+3^)%%4,_d=^(_d+3^)%%4
))
pause [ Last edited by andison625 on 2009-2-2 at 17:42 ]
|
|
2009-2-2 15:46 |
|
|
andison625
初级用户
积分 70
发帖 36
注册 2008-5-21
状态 离线
|
|
2009-2-2 17:58 |
|
|