![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 04:53 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 写了个BAT,在日期计算上遇到些问题,望大虾指点 |
| 可打印版本 1,035 / 10 |
| 第1楼 hpjustlove | 发表于 2008-07-18 19:38 |
| 新手上路 发帖 5 积分 12 | |
|
写了个BAT,在日期计算上遇到些问题,望大虾指点 程序的目的就是输入一个日期,然后算出这个日期所在的那一周的周日是几号。
我大概的写了想,不过好像发现问题是出现后面的日期的加减上。大虾帮我看下是不是哪边要改下,或者是有错误,谢谢! 代码: @echo off setlocal enabledelayedexpansion cls :main echo. 请输入需要计算的日期 echo. 格式如:08-07-17表示08年7月17日 set /p input= 请输入: ::获取输入数据,并分离出日期,月,年 set year1=%input:~0,2% ::将年前面加"20"字符为了能让星期计算公式正常计算 set year=20%year1% set month=%input:~3,2% set day=%input:~6,2% ::获得当天的日期 set tdy=%date:~4,12% ::计算输入的日期是星期几 set /a w=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400+1)%%7 ::计算输入的日期所在周的周末的日期 set /a cw=7-w ::将输入的数据整理成日期格式 set inputday=%year%-%month%-%day% ::计算输入日期所在周的周日的日期 set /a outputday=inputday+cw echo. 您输入的日期所在周的周日是:%outputday% pause goto main |
|
| 第2楼 HAT | 发表于 2008-07-18 20:17 |
| 版主 发帖 5,017 积分 9,023 | |
|
set命令用来计算的话,应该这样写吧:
set a=100 set b=200 set /a c=%a%+%b% |
|
| 第3楼 bat-zw | 发表于 2008-07-18 20:39 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
其实计算日期这个问题比较复杂,这是我以前写的,楼主参考下吧:
|
|
| 第4楼 HAT | 发表于 2008-07-18 20:52 |
| 版主 发帖 5,017 积分 9,023 | |
|
纯批的可读性、可维护性相对较差,如果允许调用vbs的话,就简单多了:)
|
|
| 第5楼 hpjustlove | 发表于 2008-07-19 08:51 |
| 新手上路 发帖 5 积分 12 | |
|
是想用vbs写函数,格式为:
call *.vbs [输入日期] [计算的天数] [输出日期] 碍于vbs压根就不懂,能不能帮忙找个合适的函数。 |
|
| 第6楼 slore | 发表于 2008-07-19 09:08 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
msgbox #2008/7/19#+2
|
|
| 第7楼 hpjustlove | 发表于 2008-07-19 09:30 |
| 新手上路 发帖 5 积分 12 | |
|
就这么一行?也得弄个几行吧。
我是要得到一个返回数然后参与下面的计算的。 |
|
| 第8楼 hpjustlove | 发表于 2008-07-19 09:32 |
| 新手上路 发帖 5 积分 12 | |
|
大虾们看看,能不能就这个BAT更改下,作为函数调用。
@echo off title 日期查询 color 1f if [%1]==[] call :Help call :Date2Day %1 days set/a days=%days%+%2 call :Day2Date %days% date echo. echo -----------结果--------------- echo. echo 你查询的日期为:%date% echo ------------------------------ cmd /k :Date2Day setlocal ENABLEEXTENSIONS for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do ( set yy=%%a & set mm=%%b & set dd=%%c ) set /a dd=100%dd%%%100,mm=100%mm%%%100 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 endlocal&set %2=%j%&goto :EOF :Day2Date setlocal ENABLEEXTENSIONS set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF :Help cls echo ________________________________________________ echo 使用方法:%~nx0 [日期] [天数] echo. echo 日期格式:2007-03-31 echo 天数格式:+/-查询的天数 echo 示例:%~nx0 2007-03-31 3 就是查询3天后的日期 echo ________________________________________________ echo. cmd /k |
|
| 第9楼 slore | 发表于 2008-07-19 09:33 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
返回数你只能用for得到……或者再次调用bat用参数的方式……
如果纯VBS完成就简单了 NewDate=#2008/7/19#+2 NewDate可以拉去计算…… |
|
| 第10楼 terse | 发表于 2008-07-19 21:11 |
| 银牌会员 发帖 946 积分 2,404 | |
|
重写一个 有帮助不?
|
|
| 第11楼 metoo | 发表于 2008-07-19 21:31 |
| 初级用户 发帖 93 积分 195 | |
|
提个思路,让系统帮你算。。涉及月份变更的话还得改改,懒得动了
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |