![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-25 21:23 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,275 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 请高手们帮忙修改一下这个关于时间的批处理 |
| 可打印版本 4,087 / 26 |
| 第1楼 tianzizhi | 发表于 2006-10-22 22:21 |
| 高级用户 发帖 214 积分 623 | |
|
请高手们帮忙修改一下这个关于时间的批处理 我现在需要一个批处理,以现在的时间为起点,过指定的时间后运行一个命令.
我在网上找到下面的批处理程序,但它有一个问题,就是当时间为0*:**时就不能正确运行了,因为0*+1加不起来呀,例如:当早上08:30时就不能正确运行了,但到了10点以后就行了,因为这时再加1能加起来了,就是小时位上第一个数为0的问题,如何解决这个问题呀. 请高手们帮忙修改一下下面的批处理,使它在一天24小时内都能用,或提供一下能满足我要求的其它批处理程序,谢谢. @echo off setlocal ENABLEDELAYEDEXPANSION set /a next_hour=0 set /a next_minute=0 for /F "tokens=1,2 delims=:" %%i in ('TIME /t') do ( rem 这里1是间隔时间,可以根据需要自己调节 set /a next_minute=%%j+1 set /a next_hour=%%i+1 if !next_minute! GEQ 60 ( set /a next_minute=!next_minute!-60 set /a next_hour=!next_hour!+1 if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24 ) ) at !next_hour!:!next_minute! d:\常用\d.vbs schtasks /delete /tn "zhang" /f endlocal |
|
| 第2楼 namejm | 发表于 2006-10-23 00:48 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
如果小时数和分钟的首位上出现0,可以把如下代码
修改为 奇怪的是,在我的机子上并没有出现小时数首位为0的情况。 [ Last edited by namejm on 2006-10-23 at 00:52 ] |
|
| 第3楼 不得不爱 | 发表于 2006-10-23 00:55 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
@echo off
setlocal ENABLEDELAYEDEXPANSION rem 这里1是间隔时间,可以根据需要自己调节 set a=%time:~0,2% if %a:~0,1%==0 (set/a next_hour=%a:~1%+1) else set/a next_hour=a+1 set a=%time:~3,2% if %a:~0,1%==0 (set/a next_minute=%a:~1%+1) else set/a next_minute=a+1 if %next_minute% GEQ 60 (set /a next_minute=!next_minute!-60 set /a next_hour=!next_hour!+1 if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24 ) at !next_hour!:!next_minute! d:\常用\d.vbs schtasks /delete /tn "zhang" /f endlocal |
|
| 第4楼 tianzizhi | 发表于 2006-10-23 01:23 |
| 高级用户 发帖 214 积分 623 | |
|
版主真聪明,现在可用了,谢谢,(用time 时小时首位不会出现0的,但用time /t 时就会出现了,版主试试).
|
|
| 第5楼 tianzizhi | 发表于 2006-10-23 01:38 |
| 高级用户 发帖 214 积分 623 | |
|
版主麻烦你再改一下,把时间设成10点以后还行的,但设成10点以前还是不行的,显示:此时不应有<set/a.
[ Last edited by tianzizhi on 2006-10-23 at 01:43 ] |
|
| 第6楼 不得不爱 | 发表于 2006-10-23 02:43 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
@echo off
setlocal ENABLEDELAYEDEXPANSION rem 这里1是间隔时间,可以根据需要自己调节 set/a next_hour=%time:~0,2%+1 set a=%time:~3,2% if %a:~0,1%==0 (set/a next_minute=%a:~1%+1) else set/a next_minute=a+1 if %next_minute% GEQ 60 (set /a next_minute=!next_minute!-60 set /a next_hour=!next_hour!+1 if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24 ) at !next_hour!:!next_minute! d:\常用\d.vbs schtasks /delete /tn "zhang" /f endlocal [ Last edited by qwe1234567 on 2006-10-23 at 04:22 ] |
|
| 第7楼 不得不爱 | 发表于 2006-10-23 02:56 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
——————————————————版务纪录——————————————————
执行:qwe1234567 说明:重复发表主题 {请高手们帮忙修改一下这个关于时间的批处理} 在{DOS疑难解答 & 问题讨论 (解答室)} 请不要发表重复主题 操作:合并主题,并且删除楼主的重复主题帖子 ———————————————————————————————————————— |
|
| 第8楼 tianzizhi | 发表于 2006-10-23 03:59 |
| 高级用户 发帖 214 积分 623 | |
|
版主少了一句呀,set a=%time:~0,2%
非常感谢你让我学到很多知识. @echo off setlocal ENABLEDELAYEDEXPANSION rem 这里1是间隔时间,可以根据需要自己调节 set a=%time:~0,2% set/a next_hour=a+1 set a=%time:~3,2% if %a:~0,1%==0 (set/a next_minute=%a:~1%+1) else set/a next_minute=a+50 if %next_minute% GEQ 60 (set /a next_minute=!next_minute!-60 set /a next_hour=!next_hour!+1 if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24 ) at !next_hour!:!next_minute! d:\常用\d.vbs schtasks /delete /tn "zhang" /f endlocal 这下可会了,折腾了半天了,让我学会了两种不同的方法呀,一个是脑筋急转变,一个是严谨的dos学习过程,很不错,也让我学会了set的偏移量和长度的使用, 还是在应用中学东西快呀,呵呵,建议学dos的朋友要在实践中学呀,多给自己提问. |
|
| 第9楼 不得不爱 | 发表于 2006-10-23 04:26 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
在给你优化下
@echo off setlocal ENABLEDELAYEDEXPANSION rem 这里1是间隔时间,可以根据需要自己调节 set/a next_hour=%time:~0,2%+1 set/a next_minute=1%time:~3,2%-100+1 if %next_minute% GEQ 60 (set /a next_minute=!next_minute!-60 set /a next_hour=!next_hour!+1 if !next_hour! GEQ 24 set /a next_hour=!next_hour!-24 ) at !next_hour!:!next_minute! d:\常用\d.vbs schtasks /delete /tn "zhang" /f endlocal |
|
| 第10楼 tianzizhi | 发表于 2006-10-23 04:43 |
| 高级用户 发帖 214 积分 623 | |
|
集两者与一,好!都要了.
|
|
| 第11楼 tianzizhi | 发表于 2006-10-23 04:52 |
| 高级用户 发帖 214 积分 623 | |
|
再问一下版主,那个GEQ是大于的意思吧,那小于是哪个呀,怎么以前没有见过它们呀,在批处理里经常比较大小的> <不能用是吗,类似的这些符号在哪里可以找到呢??
|
|
| 第12楼 lxmxn | 发表于 2006-10-23 05:50 |
| 版主 发帖 4,938 积分 11,386 | |
|
EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于 之所以不能用< >之类的符号判断大小,是因为在批处理中,<、>、>>都是重定向符号,有特殊的用处。 |
|
| 第13楼 tao0610 | 发表于 2006-10-24 05:25 |
| 高级用户 发帖 218 积分 579 | |
|
at !next_hour!:!next_minute! d:\常用\d.vbs
中的!next_hour!和!next_minute!也是变量吗? 两边加的叹号和%相似吗? |
|
| 第14楼 78586862 | 发表于 2006-10-28 08:02 |
| 初级用户 发帖 14 积分 25 | |
Originally posted by qwe1234567 at 2006-10-23 04:26 AM: 请问版主 这个间隔是 1 这个1代表的时间是多久 是1分还是1小时 如果我要20分以后运行指定文件 那应该怎么修改 如果是4小时又应该怎么修改呢 还有 这个批处理 是不是运行一次以后 就不需要在运行了 到了指定时间就会自己运行指定的 文件呢 它是不是24小时都在进程里的 at !next_hour!:!next_minute! d:\常用\d.vbs 这个是指运行的指定文件 那这个 schtasks /delete /tn "zhang" /f 是指定要删除 F盘下的 zhang名字的文件吗 麻烦告诉我这个菜鸟 我也正在学习 如果这个批处理真的那么神奇的话 就对我很重要 谢谢了 |
|
| 第15楼 不得不爱 | 发表于 2006-10-28 09:04 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
要20分以后运行指定文件 那就改1为20就是了
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |