[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] [分享]批处理延时

今日偶尔看到某牛写的一本《批处理编程教程》,没想到批处理竟然可以折腾出这么多花样来。其中关于延时问题介绍得不太详细,本着“百度一下,你就甚么都明白了”的精神,俺百度了一下,结果发现这问题果然有很多解。总的来说大概有:
1.用ping
2.用vbs(cscript, wscript)
3.用choice(xp之后已不可用)
4.用mshta
5.用msg
  这些方法各有优缺点。俺一时手痒,也写了一段延迟程序,没用甚么奇巧淫技,只用了内部命令,误差在10ms以内,但CPU占用率相当高,代码如下:
  1. @rem 批处理延迟子程序(注:最多延时不超过24小时)
  2. @echo off
  3. rem 设置变量延迟
  4. setlocal enabledelayedexpansion
  5. :delay
  6. if x%1==x (
  7.     echo 用法:delay xxxx
  8.     echo 其中:xxxx为需要延迟的毫秒数
  9.     echo.
  10.     echo 例如延迟5秒:delay 5000
  11.     goto end
  12. )
  13. set /a delta=%1
  14. set t0=%time%
  15. echo 开始时间:%t0%
  16. set st=%t0:~0,1%
  17. rem 检查当前时间第1位是否为空格
  18. if not defined st (
  19.     set /a hour=%t0:~1,1%
  20. ) else (
  21.     set /a hour=%t0:~0,2%
  22. )
  23. set /a min=1%t0:~3,2%-100
  24. set /a sec=1%t0:~6,2%-100
  25. set /a ms=(1%t0:~9,2%-100)*10
  26. rem N0存放初始时间(以毫秒为单位)
  27. set /a N0=ms+sec*1000+min*60*1000+hour*60*60*1000
  28. rem 开始折腾,折腾一次不超过2ms,但time的精度为10ms,所以本程序的精度不超过10ms
  29. :loop
  30. set t0=%time%
  31. set st=%t0:~0,1%
  32. rem 检查当前时间第1位是否为空格
  33. if not defined st (
  34.     set /a hour1=%t0:~1,1%
  35. ) else (
  36.     set /a hour1=%t0:~0,2%
  37. )
  38. if hour1 lss hour (
  39.     set /a hour=24+hour1
  40. ) else (
  41.     set /a hour=hour1
  42. )
  43. set /a min=1%t0:~3,2%-100
  44. set /a sec=1%t0:~6,2%-100
  45. set /a ms=(1%t0:~9,2%-100)*10
  46. rem N2存放当前时间(以毫秒为单位)
  47. set /a N2=ms+sec*1000+min*60*1000+hour*60*60*1000
  48. rem deltax为当前时间与初始时间之差(以毫秒为单位)
  49. set /a deltax=N2-N0
  50. if %deltax% lss %delta% goto loop
  51. echo 结束时间:%time%
  52. rem 作为一个单独批处理程序时,可以不要以下语句
  53. goto :eof
  54. rem 程序结束处标记
  55. :end
复制代码

TOP

本帖最后由 jet9600 于 2012-4-17 09:28 编辑
gawk 发表于 2012-4-17 06:23


呵呵,没想到跟这里某些程序的思路是一样的,不过稍微看了一下,貌似有些程序很明显有BUG,在跨越小时(分钟等)时会有问题。
当时俺还想过调用kernel32中的Sleep,试了一下rundll32,没成功,就没管它了

TOP

回复 3# jet9600


    可能某些在某些场合不需要考虑跨太长时间

TOP

用choice(xp之后已不可用)

这个值得商榷啊,XP系统确实没有自带choice.exe,但是你真的测试过这些系统吗:
Win2003
Vista
Win2008
Win7

TOP

返回列表