中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-04 02:22
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 请问如何取下个日期时间
可打印版本  2,167 / 20
第1楼 lililulula 发表于 2007-04-07 06:25
中级用户 发帖 138 积分 302
请问如何取下个日期时间
用date取时间日期,我现在想要取系统的下一个工作日日期,比如今天星期五20070406,我想取的就是下星期一20070409,如果是星期四20070405的话我要取的就是星期五20070406,不知道如何实现,希望大大们帮忙.
本人不知道如何让日期做算术运算,另外就是不知道如何判断星期的问题.
第2楼 wudixin96 发表于 2007-04-07 11:12
银牌会员 发帖 931 积分 1,928

试试这个?
第3楼 wudixin96 发表于 2007-04-07 21:38
银牌会员 发帖 931 积分 1,928
第4楼 flyinspace 发表于 2007-04-08 06:10
银牌会员 发帖 517 积分 1,206
没有通用代码..

xp和2000里的格式都不一样。

至于日期计算是算法问题。.和这里无关。

至于星期 %date%里面已经包含了。
第5楼 lililulula 发表于 2007-04-08 13:58
中级用户 发帖 138 积分 302
谢谢wudixin96朋友。2楼是vbs脚本好像可以用,3楼的脚本有问题,如果隔年份就会出问题了~~不知道能不能解决这个问题?或者vbs脚本的变量我怎么在bat脚本下取到,是否可以??

[ Last edited by lililulula on 2007-4-8 at 04:27 PM ]
第6楼 lililulula 发表于 2007-04-09 05:29
中级用户 发帖 138 积分 302
自己先顶下 顺便把3楼的脚本消化下~~~
第7楼 flyinspace 发表于 2007-04-09 07:52
银牌会员 发帖 517 积分 1,206
这么写太麻烦了。。

可以利用系统自带的功能进行分析。。。

假设操作系统为windows xp。。

则以下脚本可以用。。(这里不进行错误判断,现场还原也不对时间判断,23:59:59秒使用时,会使日期返回错误。)

@echo off
set OldDate=%date%
:reInput
echo 请输入你要查询的日期。格式为:2007-04-05。
set /p input=^>
echo %input% | date >nul
if not errorlevel 1 (
echo 下一个工作日是: %date:~11,3%
) else (
goto :reInput
)
echo %OldDate% | date >nul
pause
第8楼 flyinspace 发表于 2007-04-09 07:55
银牌会员 发帖 517 积分 1,206
哦。。这个脚本可以查询的日期为 XP 系统支持的任意日期。

如果不在特定时间点使用,则此脚本基本无错。
第9楼 flyinspace 发表于 2007-04-09 08:05
银牌会员 发帖 517 积分 1,206
我还,没有仔细看楼主的题目。其实也很简单。

我曾经发过关于任意日期运算的帖子,可以查询任意年月日(类似于万年历的)。
不过大家好象都不喜欢,我就把贴删掉了。
日期运算需要定义时间。。
第10楼 lililulula 发表于 2007-04-10 00:01
中级用户 发帖 138 积分 302
flyinspace朋友 你的7楼脚本只是查询输入日期当天是星期几,不过我还是要问下关于echo %input% | date >nul和echo %OldDate% | date >nul两句我有点不懂,后面的| date>nul是把取到的日期置空?但是我单单实验set /p input=:> echo %input% | date>nul输入的日期会修改成为当前系统日期,而脚本中echo %OldDate% | date >nul加上后系统日期便不会修改,具体含义不是很明白,希望flyinspace朋友能告诉我下.

而我的要求是取得系统日期后判断下一个工作日,然后取的日期,3楼的脚本在搁年会出错,不知道有社么办法可以解决.
第11楼 lililulula 发表于 2007-04-10 01:23
中级用户 发帖 138 积分 302
问题我已经解决,2楼告诉了我怎么做日期算术运算,我从中得到启发,由于2楼的思考方法在脚本运行的时候如果跨年就会出错,所以我直接判断星期字符,就避免了这个问题,脚本如下(2000下):
@echo off
set day=%date:~-10,4%%date:~-5,2%%date:~-2,2%
set date=%date:~-14,3%
if %date%==星期一 set /a nextworkday=%day%+1&goto workday
if %date%==星期二 set /a nextworkday=%day%+1&goto workday
if %date%==星期三 set /a nextworkday=%day%+1&goto workday
if %date%==星期四 set /a nextworkday=%day%+1&goto workday
if %date%==星期五 set /a nextworkday=%day%+3&goto workday
if %date%==星期六 set /a nextworkday=%day%+2&goto workday
if %date%==星期日 set /a nextworkday=%day%+1&goto workday
:workday
echo 下一个工作日是:%nextworkday%
pause


还有一个问题就是为什么多重设置date的时候变量名要是date才有效?比如
set date=%date:~0,10%
set date=%date:-=%
date变量为今天日期20070409
而如果这样却无效
set day=%date:~0,10%
set day=%date:-=%
date日期为2007-04-09,第二句set无效
延迟变量开启也没有帮助

[ Last edited by lililulula on 2007-4-9 at 12:36 PM ]
第12楼 flyinspace 发表于 2007-04-10 02:06
银牌会员 发帖 517 积分 1,206
你的系统是windows 2000。。

使用我的脚本时应该会有错误提示:没有操作数。

set date=%date:~-14,3%
另外,最好不要定义已有的环境变量。

隔年出错是因为没有对年份进行判断。(有闰年、平年的区别)而且每年的第一个星期都会有偏差。。。

还有,我怎么看,这个脚本都应该有问题的。。

即使在2007年内,也肯定有几天会出现错误。

时间判断不够严密。
第13楼 lililulula 发表于 2007-04-10 02:26
中级用户 发帖 138 积分 302
flyinspace朋友你说的2楼脚本确实有问题,我按照星期判断的话,取当天星期,字符串比较,我想应该不会有问题了,因为我取的就是系统后面的星期,然后判断的话,情况也就7种啊~~~~另外你说不要定义已有的黄鲸变量是什么意思??不是很明白

[ Last edited by lililulula on 2007-4-9 at 01:28 PM ]
第14楼 flyinspace 发表于 2007-04-10 03:08
银牌会员 发帖 517 积分 1,206
建议你把批处理的教程先看一遍。

你的问题我给你指出吧。

假设 2007年4月30日。
则怎么判断?
第15楼 lililulula 发表于 2007-04-10 03:59
中级用户 发帖 138 积分 302
你一说倒真是这样,我后来也看了2楼的脚本也有着个问题,我的脚本也有这个问题,不过3楼的vbs脚本没问题,有wekekday这个自带参数~~~~,看来考虑问题没考虑全面,谢谢楼上提醒,我想知道有办法解决这个问题吗?或是vbs最后的&CDate(today),bat脚本要取这个变量值该怎么取???
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023