中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理延时还有什么精巧点的技巧吗?
« [1] [2] [3] [4] [5] »
作者:
标题: 批处理延时还有什么精巧点的技巧吗? 上一主题 | 下一主题
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『楼 主』:  批处理延时还有什么精巧点的技巧吗?

ping -n这个可实现延时,但是我认得这不是一个好办法,因为我查看了一下CPU的使用情况,ping时已经达到50%,一个延时都这样了,还搞什么程序?

2006-9-29 07:08
查看资料  发送邮件  发短消息 网志   编辑帖子
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

可以变通一下,用 at

2006-9-29 07:41
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 3 楼』:  

at好像需要服务的支持,现在许多机器优化了后都没开这个服务

2006-9-29 07:47
查看资料  发送邮件  发短消息 网志   编辑帖子
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by nvflash at 2006-9-29 07:47:
at好像需要服务的支持,现在许多机器优化了后都没开这个服务

你在自己的虮子上开就是了哦~要是想在别人的虮子上开可以执行下面的开启哦

sc config schedule start= auto
sc start schedule

2006-9-29 07:54
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 5 楼』:  

如果您说是是任务计划的话,我已经没信心了,我用多种方式试过多次任务计划,都莫名奇妙的没有正确执行,这东西不太稳当,我看还是不用这个好

2006-9-29 08:17
查看资料  发送邮件  发短消息 网志   编辑帖子
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  

呵呵,建议你搜索 "延时"  以前讨论过好多的

2006-9-29 08:19
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 7 楼』:  

批处理延时方法小结:
1.ping
@echo off
:loop
    echo %time%
    ping 127.1 -n 2 1>nul
    echo %time%
goto loop
内存使用: cmd.exe  1704k
              ping.exe  2920k   
误差评定: 较高
优点:       代码构造简单
缺点:       内存占用高,延迟时间长的话误差相对较大。


2.还是ping
@echo off
:loop
    echo %time%
    ping 1 -n 1 -w 1000 2>nul 1>nul
    echo %time%
goto loop
内存使用:  cmd.exe  1700k
               ping.exe  2912k
误差评定:  一般
优点:        代码构造简单,时间越长误差越小,精确度较高(50ms)
缺点:        内存占用高


3.call
@echo off
:loop
    echo %time%
    call :delay 1000
    echo %time%
goto loop

:delay
    set /a num=num + 1
    if %num% geq %1 (set num=) && goto :eof
rem    for /l %%i in (1,1,%1) do echo. >nul
goto :eof
内存使用:  cmd.exe 1744k  [for语句方案]
               cmd.exe 1740k  [set+goto方案]
误差评定:  很高 (受CPU频率影响非常大,几乎无法准确把握全局延迟时间)
优点:       精确度较高
缺点:        不适合需精确把握时间的场合

4.msg
@echo off
:loop
    echo %time%
    msg %username% /time:20 /w "正在延时,点确定可以取消延时!"
    echo %time%
goto loop
内存使用:  cmd.exe  1752k
               msg.exe  2620k
误差评定:  低
优点:       比较稳定,可中途取消延时,代码构造简单
缺点:        内存占用非常大,有窗口弹出(优点?缺点?)

5.vbs
@echo off
    echo Wscript.Sleep WScript.Arguments(0) >%tmp%\delay.vbs
:loop
    echo %time%
    cscript //b //nologo %tmp%\delay.vbs 2000
    echo %time%
goto loop
内存使用:  cscript.exe 4812k
               cmd.exe    1708k
误差评定:  很低
优点:        精确度最高,使用更灵活,方便
缺点:        产生临时文件,内存占用多


End:
1.测试条件有限,以上数据并不具备权威性。
2.关于精确度。
   其实只要是参数可以指定时间的命令精确度都比较高,之所以受影响是取决与命令执行的次数,次数越多,精确度越低。而方案5[vbs方案]中之所以说它的精确度最高,可以举个例子: cscript //b //nologo delay.vbs 2036,而方案二由于最小精确度的缘故,还是比方案5要差一点。
3.欢迎大家补充。
参考链接:
1.从一个GIF文件引起的麻烦  
2.[讨论]批处理编程的异类


[ Last edited by 3742668 on 2006-9-29 at 08:49 ]

2006-9-29 08:48
查看资料  发送邮件  发短消息 网志   编辑帖子
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 8 楼』:  

能讲一下你为什么要延时操作?

2006-9-29 08:49
查看资料  发送邮件  发短消息 网志   编辑帖子
nvflash
初级用户





积分 126
发帖 38
注册 2006-9-26
状态 离线
『第 9 楼』:  

请问版主,除了%time%以外,还有哪些是系统内置的变量?

2006-9-29 09:11
查看资料  发送邮件  发短消息 网志   编辑帖子
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by nvflash at 2006-9-29 09:11:
请问版主,除了%time%以外,还有哪些是系统内置的变量?

1.运行不带参数的命令set
2.运行命令set /?,末尾。

   此帖被 +2 点积分    点击查看详情   
评分人:【 分数: +1  时间:2010-1-27 09:13
评分人:【 newborenee 分数: +1  时间:2010-3-10 22:14


2006-9-29 09:14
查看资料  发送邮件  发短消息 网志   编辑帖子
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 11 楼』:  

推荐一个标准 posix 命令:sleep,例如:

睡 10 秒
sleep 10s

1分钟
sleep 1m  

2小时
sleep 2h

5天:
sleep 5d

附件是 sleep 的 win32 版,对于需要到处传播的批处理来说可能不太方便。自己用的话还是不错的。

附件 1: sleep.rar (2006-11-3 12:40, 7.57 K, 下载附件所需积分 1 点 ,下载次数: 381)
2006-11-3 12:40
查看资料  发送邮件  发短消息 网志   编辑帖子
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  


  呵呵,多谢楼上又提供了一个延时的小工具,下载来试试~~

  记得还有一个工具,叫sleepx,它可以精确到毫秒,不知道这个sleep有没有比较高的精确度哈~~


2006-11-3 23:43
查看资料  发送邮件  发短消息 网志   编辑帖子
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by lxmxn at 2006-11-3 23:43:

  呵呵,多谢楼上又提供了一个延时的小工具,下载来试试~~

  记得还有一个工具,叫sleepx,它可以精确到毫秒,不知道这个sle ...

呵呵,在 win32 下面,除了用API:timeSetEvent,其它手段很难做到精确的毫秒级延迟(虽然 Performance Counter 也可以,但是CPU耗用率过高)。

timeSetEvent 会在系统全局范围改变时间片粒度,对系统性能也有一点影响。兄台如果觉得真的有必要的话,俺可以写一个

2006-11-4 04:25
查看资料  发送邮件  发短消息 网志   编辑帖子
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 14 楼』:  

这个好啊
支持

2006-12-26 07:40
查看资料  发短消息 网志   编辑帖子
PPdos
高级用户




积分 783
发帖 268
注册 2006-12-26
状态 离线
『第 15 楼』:  用 goto和set 来做延时

@echo off
echo 当前秒数:%time:~6,-3%
set /p dalay="输入60以内延迟秒数:"%dalay%
:compte
if not %dalay%==%time:~6,-3% goto compte
echo 时间到!!买单!
pause>nul

2006-12-26 19:20
查看资料  发短消息 网志   编辑帖子
« [1] [2] [3] [4] [5] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: