Board logo

标题: [其他] 批处理延迟时间的方法有几种? [打印本页]

作者: novaa    时间: 2007-11-30 19:10     标题: 批处理延迟时间的方法有几种?

我知道的是使用ping 和 使用 循环(for /l %%a in (1 1 500) do set /p=<nul))
作者: smilediao    时间: 2007-11-30 20:01

还可以使用wscript.sleep  
例如延时5秒
wscript.sleep 5000
就可以了。
作者: youxi01    时间: 2007-12-9 08:36     标题: 收集整理的各种延时方法

1、利用ping命令实现延时,方法巧妙而且可以控制,但精度不高。
如:ping -n 3 127.0.0.1>nul大约可以停顿2秒
-n后的数字是发送包的数目,为暂停秒数加一。此法每秒有0.5%的偏差,时间精度为1秒。

2、用vbs脚本中的sleep实现,样本代码如下:
以上程序代码可以实现暂停2秒,2秒过后回显OK!
  1. @echo off
  2. echo Wscript.Sleep Wscript.Arguments(0) * 1000>Delay.vbs
  3. Delay.vbs 2
  4. del Delay.vbs
  5. echo OK!
复制代码
3、利用“死”循环:设定一个时间差,如果当前时间与设定时间之差不大于设定之时间差,则不退出该循环,从而达到延时的目的。样本代码:
  1. @echo off
  2. set /a Start=%time:~6,2%
  3. :ProDelay
  4. set /a Now=%time:~6,2%
  5. set /a Diff=%Now%-%Start%
  6. rem 以下这一句可以防止秒数从59跳到1时产生的错误。
  7. if %Diff% lss 0 set /a Diff=%Diff%+60
  8. if %Diff% leq 2 goto :ProDelay
  9. echo ok!
复制代码
4、利用at命令。不过此方法与其说是延时,还不如说成定时的好,而且还要开启相应服务。

5、最精确的延时方法:sleep.exe
  1. @echo off
  2. echo q | debug>nul
  3. echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>sleep.com
  4. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>sleep.com
  5. echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?seHB~_Phxr?@zAB`LrPEyoDt@Cj?>>sleep.com
  6. echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>sleep.com
  7. echo LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk>>sleep.com
  8. echo _GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=>>sleep.com
  9. echo EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R>>sleep.com
  10. echo _OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?>>sleep.com
  11. echo dsmSQswDOR[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM>>sleep.com
  12. echo QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>>sleep.com
  13. echo @dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\EH>>sleep.com
  14. echo {zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G>>sleep.com
  15. echo Q??PGT~B??OC~?ipO?T?~U?p~cUo0x>>sleep.com
  16. sleep.com>sleep.exe
  17. del sleep.com
  18. echo wait 2 seconds:
  19. sleep.exe 2000  
复制代码
6、msg
  1. @echo off
  2. msg * /time:2 /w "正在延时,点确定可以取消延时!"
复制代码
7、通过循环命令来达到延时:
  1. @echo off
  2. :TimeDelay  1000
  3. pause>nul
  4. exit
  5. :TimeDelay 次数
  6. for /l %%i in (1 1 %1) do ver>nul
  7. goto :eof
复制代码

作者: tcl    时间: 2008-2-13 16:49

5、最精确的延时方法:sleep.exe


这个是不是要用到sleep.exe这个文件?是Windows自带的吗?
还有前面的一堆字母不知是什么意思哟?

[ 本帖最后由 tcl 于 2008-2-13 16:52 编辑 ]
作者: heiing    时间: 2008-2-14 14:56

本帖最后由 pcl_test 于 2016-8-14 10:49 编辑

回复 3# youxi01

它说sleep.exe不是有效的Win 32程序
作者: 小勇12    时间: 2008-7-4 21:50

延时还可以用
choice
choice /t 2  /c yn /d y /n
作者: yongyue258    时间: 2008-9-11 22:31

看不明白的咧。还要继续深入学习。
作者: lhjoanna    时间: 2008-11-5 02:15     标题: 一点改进~~~

冒昧讲一下,youxi01第三种利用“死循环”的方法,是不是只能延迟在1分钟以内,并且精确度为1秒吧?还有一个小bug,就是在运行是会出现数字识别错误的问题,我想大概是截取的两位秒数有可能出现01,02,03...吧?
        系统时间的格式为 1:49:46.26(注:前面的1之前有一空格),是精确到10毫秒的,所以利用死循环也可以精确到10毫秒。
  1. @echo off
  2. :begin
  3. echo ===========================
  4. set /p delay=请输入需要延迟的毫秒数:
  5. set TotalTime=0
  6. set NowTime=%time%
  7. echo 程序开始时间:%NowTime%
  8. :_delay
  9. set /a minute1=1%NowTime:~3,2%-100
  10. set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
  11. set NowTime=%time%
  12. set /a minute2=1%NowTime:~3,2%-100
  13. set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
  14. set /a TotalTime+=(minute2-minute1+60)%%60*60000+second2-second1
  15. if %TotalTime% lss %delay% goto _delay
  16. echo 程序结束时间:%time%
  17. echo 设定延迟时间:%delay%毫秒
  18. echo 实际延迟时间:%TotalTime%毫秒
  19. goto begin
复制代码
这样可以精确到10毫秒,一点想法,有什么错误欢迎大家指出。
作者: firewolf85    时间: 2008-12-9 14:54

不建议用死循环的办法,和其他编程一样,这种循环的办法都会消耗大量的系统资源,支持环保拒绝浪费
作者: qqha001    时间: 2008-12-10 09:52

3楼介绍的方法中,第三个方法 请解释一下这句的意思set /a Start=%time:~6,2%。谢谢。%time:~6,2% 这里看不懂。
作者: zjw767676    时间: 2009-2-11 21:14     标题: 回复 10楼 的帖子

echo %time%
::显示时间为   21:10:12.23
echo %time:~6,-2%
::显示为     12.(意思是去掉前面的6个字符,再舍去后面两个,显示剩下的)
要显示秒数要%time:~6,3%把数字后面的点也去掉!

[ 本帖最后由 zjw767676 于 2009-2-11 21:18 编辑 ]
作者: zjw767676    时间: 2009-2-11 21:20

晕了!怎么编辑不了啊?
应该是%time:~6,-3%
作者: Batcher    时间: 2009-2-11 21:40     标题: 回复 12楼 的帖子

编辑不了?有报错信息不?
作者: zjw767676    时间: 2009-2-16 20:18     标题: 回复 13楼 的帖子

没有错误提示!改了之后点编辑帖子按钮,显示出来的还是原样!!!
作者: 二手普桑    时间: 2009-3-17 20:54

本帖最后由 pcl_test 于 2016-8-14 10:50 编辑

回复 3# youxi01
运行后产生一个sleep.exe   是什么?
作者: freeback    时间: 2009-3-22 17:01

在sleep.exe中如何使用?也应该一起发来
作者: 5810239q    时间: 2009-3-27 20:14

先记住常用的,有难度的慢慢来
作者: Batcher    时间: 2009-3-27 20:16     标题: 回复 17楼 的帖子

3楼不是说了么?再仔细看看吧。
作者: 5566ljlj    时间: 2009-11-6 16:18

那个SLEEP.EXE好像确实不能运行
作者: wc726842270    时间: 2010-12-30 18:33

利用msg的方法真是没见过,不过倒是对循环延时很期待。
作者: dostt2008    时间: 2016-8-14 08:42

本帖最后由 dostt2008 于 2016-8-14 08:45 编辑

批处理的过程  运行这三条命令.应怎么设

start a.exe
start b.exe 延时大于随机60分钟而小于120分钟执行

start c.exe

(start c.exe 不要等待 随机60分钟而小于120分钟执行)


如何编呢




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2