标题: 批处理延时还有什么精巧点的技巧吗?
[打印本页]
作者: nvflash
时间: 2006-9-29 07:08
标题: 批处理延时还有什么精巧点的技巧吗?
ping -n这个可实现延时,但是我认得这不是一个好办法,因为我查看了一下CPU的使用情况,ping时已经达到50%,一个延时都这样了,还搞什么程序?
作者: vkill
时间: 2006-9-29 07:41
可以变通一下,用 at
作者: nvflash
时间: 2006-9-29 07:47
at好像需要服务的支持,现在许多机器优化了后都没开这个服务
作者: vkill
时间: 2006-9-29 07:54
Quote: |
Originally posted by nvflash at 2006-9-29 07:47:
at好像需要服务的支持,现在许多机器优化了后都没开这个服务 |
|
你在自己的虮子上开就是了哦~要是想在别人的虮子上开可以执行下面的开启哦
sc config schedule start= auto
sc start schedule
作者: nvflash
时间: 2006-9-29 08:17
如果您说是是任务计划的话,我已经没信心了,我用多种方式试过多次任务计划,都莫名奇妙的没有正确执行,这东西不太稳当,我看还是不用这个好
作者: vkill
时间: 2006-9-29 08:19
呵呵,建议你搜索 "延时" 以前讨论过好多的
作者: 3742668
时间: 2006-9-29 08:48
批处理延时方法小结:
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 ]
作者: redtek
时间: 2006-9-29 08:49
能讲一下你为什么要延时操作?
作者: nvflash
时间: 2006-9-29 09:11
请问版主,除了%time%以外,还有哪些是系统内置的变量?
作者: 3742668
时间: 2006-9-29 09:14
Quote: |
Originally posted by nvflash at 2006-9-29 09:11:
请问版主,除了%time%以外,还有哪些是系统内置的变量? |
|
1.运行不带参数的命令set
2.运行命令set /?,末尾。
作者: asbai
时间: 2006-11-3 12:40
推荐一个标准 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)
作者: lxmxn
时间: 2006-11-3 23:43
呵呵,多谢楼上又提供了一个延时的小工具,下载来试试~~
记得还有一个工具,叫sleepx,它可以精确到毫秒,不知道这个sleep有没有比较高的精确度哈~~
作者: asbai
时间: 2006-11-4 04:25
Quote: |
Originally posted by lxmxn at 2006-11-3 23:43:
呵呵,多谢楼上又提供了一个延时的小工具,下载来试试~~
记得还有一个工具,叫sleepx,它可以精确到毫秒,不知道这个sle ... |
|
呵呵,在 win32 下面,除了用API:timeSetEvent,其它手段很难做到精确的毫秒级延迟(虽然 Performance Counter 也可以,但是CPU耗用率过高)。
timeSetEvent 会在系统全局范围改变时间片粒度,对系统性能也有一点影响。兄台如果觉得真的有必要的话,俺可以写一个
作者: scriptor
时间: 2006-12-26 07:40
这个好啊
支持
作者: PPdos
时间: 2006-12-26 19:20
标题: 用 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
作者: PPdos
时间: 2006-12-26 19:27
标题: 失误了 cup 100% :(
如果用ping空ip的方法 ,是不是可以改变默认数据包大小为 1 字节可用呢?
作者: lp1129
时间: 2007-3-28 02:32
强烈的支持,顶!
作者: stornager
时间: 2007-4-14 04:10
我知道了延时的一大诀窍.谢谢高手啦!!!!
作者: windeshadow
时间: 2007-4-17 01:07
不错
作者: testdamao
时间: 2007-4-17 02:13
谢谢了
作者: flyinspace
时间: 2007-4-17 09:12
WSCRIPT.SLEEP 1000
这个东西有误差的。根据cpu的速率,误差在0.01-0.03秒之间。
这个是经过2000余次的延时500统计中得出的数据。。
假设输出计数用去了0.01秒。。
误差也在 0.02秒间。。
作者: yio
时间: 2007-4-23 05:37
标题: good
good
作者: feixiang9911
时间: 2007-4-23 16:23
顶 我第一次来DOS联盟 学了不少东西 呵呵 看到了很多高手
希望高手门能多多 指教
作者: sw000521
时间: 2007-5-8 12:34
标题: 谢谢了
了解了不少
作者: dxvyi1
时间: 2007-5-8 14:00
好东西啊,我下来试试
作者: heixingdos
时间: 2007-5-10 13:59
楼主正解
作者: clian76
时间: 2007-5-13 01:34
学习了。
作者: doggy
时间: 2007-5-14 01:39
嗯,今天正好在写批处理,需要用一个延时的程序
是参考PPdos大侠的代码,自己写了一个,能够实现60秒以内的延时处理,嗯,这个误差。。应该说一秒以内吧
随便用用一般就够了
Call :BatchDelay 3
Goto Eof
:BatchDelay
Set /a delayLen=%1 %% 60
Set nowtime=%TIME:~6,-3%
Set /a delayEnd=%nowtime%+%delayLen%
Set /a delayEnd=%delayEnd% %% 60
:BatchDelay2
Echo %delayEnd% %TIME:~6,-3%
Set nowtime=%TIME:~6,-3%
If %delayEnd% NEQ %nowtime% Goto :BatchDelay2
Goto Eof
:Eof
作者: doggy
时间: 2007-5-14 02:06
不好意思,刚才那一段有dos八进制自动转换问题,写的时候没有考虑到,现在修正了~
:BatchDelay
Set /a delayLen=%1 %% 60
Set nowtime=%TIME:~6,-3%
If %nowtime:~0,1% EQU 0 Set nowtime=%nowtime:~-1%
Set /a delayEnd=%nowtime%+%delayLen%
Set /a delayEnd=%delayEnd% %% 60
:BatchDelay2
Set nowtime=%TIME:~6,-3%
If %nowtime:~0,1% EQU 0 Set nowtime=%nowtime:~-1%
Echo %delayEnd% %nowtime%
If %delayEnd% NEQ %nowtime% Goto :BatchDelay2
Goto Eof
作者: wunekky
时间: 2007-6-5 20:11
为什么用ping -n 40 127.1>nul 2>nul
在我的电脑上能实现,但用在不能上网的电脑上好像不起作用了?
作者: xdoit
时间: 2007-6-5 23:49
谢谢楼主发贴指导。
作者: qinbuer
时间: 2007-6-6 01:17
飘过,学习了
作者: xionghaijian
时间: 2007-6-7 14:14
顶一下,不然下不了!
作者: wbshu
时间: 2007-6-15 11:59
谢谢了!
作者: tiancaizfy
时间: 2007-6-17 11:47
顶 我延时只用ping 落后啊
作者: lywindly
时间: 2007-6-18 02:02
DING
作者: kanny19801214
时间: 2007-6-18 13:38
不错 学习下 我只想到用PING实现
作者: okmmmyyy
时间: 2007-6-24 22:27
看看.................
作者: recooliu
时间: 2007-6-25 12:01
我也是用PING啊~~~~~
作者: tiger3912
时间: 2007-6-25 13:30
不错,我学习,顶
作者: lijialijia
时间: 2007-6-27 16:00
标题: 看明白了
高手很多终于看明白了
作者: SunRiseBoy
时间: 2007-6-28 20:28
http://www.cn-dos.net/forum/viewthread.php?tid=15752
也是这个延时问题,已经自动锁帖。
在这上传附件。wait 10
附件
1: WAIT.rar (2007-6-28 20:28, 562 bytes,下载次数: 80)
作者: woainiphj
时间: 2007-7-4 17:07
标题: DOS高手们!
大家都是DOS高手.我也不会输的!!1
作者: 000012
时间: 2007-7-26 14:40
感觉都是高手啊--呵呵呵
作者: netwinxp
时间: 2007-7-28 20:25
对于较长时间的延时,担心不准确的话,可以用time /T来取得实际时间
作者: netwinxp
时间: 2007-7-28 20:25
对于较长时间的延时,担心不准确的话,可以用time /T来取得实际时间
作者: 3dnowex
时间: 2007-8-19 16:22
@ECHO OFF
SETLOCAL EnableExtensions
CALL :ProcDelay 200
ECHO %TIME%
GOTO :EOF
:ProcDelay delayMSec_
SETLOCAL EnableExtensions
FOR /f "tokens=1-4 delims=:. " %%h IN ("%TIME%") DO SET start_=%%h%%i%%j%%k
:_procwaitloop
FOR /f "tokens=1-4 delims=:. " %%h IN ("%TIME%") DO SET now_=%%h%%i%%j%%k
SET /a diff_=%now_%-%start_%
IF %diff_% LSS %1 GOTO _procwaitloop
ENDLOCAL & GOTO :EOF
:EOF
作者: magnus
时间: 2007-8-24 10:17
因为需要安装了网卡才会自动安装TCP/IP协议,ping工具需要用TCP/IP协议工作。所以在没有网卡的电脑上一般ping不会生效。
作者: aq1986
时间: 2007-10-26 18:26
标题: fds
af
作者: ywjco
时间: 2007-12-3 21:19
:: Sleep.bat - Sleep/Delay/Wait n seconds
:: Herbert Kleebauer(Germany) - 2005/05/29
:: Modified by Will Sort - 2005/06/02
@echo off
echo q | debug>nul
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>sleep.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>sleep.com
echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?seHB~_Phxr?@zAB`LrPEyoDt@Cj?>>sleep.com
echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>sleep.com
echo LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk>>sleep.com
echo _GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=>>sleep.com
echo EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R>>sleep.com
echo _OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?>>sleep.com
echo dsmSQswDOR[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM>>sleep.com
echo QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>>sleep.com
echo @dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\EH>>sleep.com
echo {zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G>>sleep.com
echo Q??PGT~B??OC~?ipO?T?~U?p~cUo0x>>sleep.com
sleep.com>sleep.exe
运行这个BAT,可以得到sleep.com及sleep.exe,前者可以在DOS6-7下运行,后者在XP的CMD下可以运行.
作者: luxiao6802
时间: 2007-12-4 22:49
小弟菜鸟 学习了
作者: pqowi
时间: 2007-12-29 18:07
太感谢了
作者: greenworld
时间: 2007-12-30 15:35
choice命令吧,偶觉得比ping好,呵呵
作者: vivai
时间: 2008-1-9 10:57
多谢楼上又提供了一个延时的工具
作者: pinghu
时间: 2008-2-1 21:59
今天收获一个延时工具
作者: cnpsx
时间: 2008-2-28 19:19
谢谢楼主,全网就这个论坛有了
作者: wogan
时间: 2008-3-3 13:56
高手们太厉害了
作者: whq98
时间: 2008-3-4 10:44
下来收藏先!
作者: yuehong
时间: 2008-3-5 21:55
高手们太厉害了 。。。
学习了。。。
作者: jonsonqf
时间: 2008-5-2 01:08
貌似延时太久的话很多都不准了
作者: kflgw93
时间: 2008-5-19 09:17
用工具比较方便
作者: 896376374
时间: 2008-5-19 13:25
呵呵,建议你搜索 "延时" 以前讨论过好多的
作者: lllllll
时间: 2008-8-25 10:24
这个延时功能正需要,太好了
作者: georgema
时间: 2008-9-28 15:52
这个延时功能太好了
作者: hlyw
时间: 2008-10-7 15:10
新人还没搞懂要延时有哪些用处。
作者: mryeke
时间: 2008-10-7 19:57
感谢楼上的无私分享
作者: ceasar128
时间: 2008-10-25 14:43
标题: 好东西,正在担心怎么弄呢
谢谢。好东西。
作者: rzkmssj
时间: 2008-10-27 16:34
我用WScript sleep命令实现在指定时间(ms)内脚本执行暂挂,然后继续运行
如下,延迟5秒的批处理文本,
echo WScript.sleep 5000>>x.vbs
call x.vbs
del x.vbs
作者: rzkmssj
时间: 2008-10-27 16:35
我用WScript sleep命令实现在指定时间(ms)内脚本执行暂挂,然后继续运行
如下,延迟5秒的批处理文本,
echo WScript.sleep 5000>>x.vbs
call x.vbs
del x.vbs
作者: zhaokbk
时间: 2008-11-6 20:05
大家都是DOS高手.我也不会输的
作者: zhaokbk
时间: 2008-11-6 20:09
echo WScript.sleep 1000>1.vbs & call 1.vbs & del 1.vbs
延迟1秒
作者: terxiuz
时间: 2008-11-13 19:26
这个好啊
支持