毫秒(!)在批处理中没有外部等待?

时间:2013-09-26 09:13:29

标签: batch-file time-wait

我已经进行了大量搜索,但只在秒数单位中找到批处理文件中的等待提示(ping方法即。)。

由于我需要在两个命令之间等待10-100毫秒,所以不幸的是,这对我不起作用。

等待时间不需要“超级准确”。在我的情况下,如果它是10毫秒或12/15毫秒没有产生很大的不同,但它应该能够区分10和20之间。

我想知道是否有解决方案,如果有可能的话,只使用Windows“on on”命令/技巧,因为我想在以后在另一台机器上使用时只需要批处理以便于“安装”。

3 个答案:

答案 0 :(得分:3)

@echo off

echo Time before: %time%
echo Wait %1 centiseconds (or more)
call :wait %1
echo Time after:  %time%
goto :EOF

:wait centiseconds
for /F "tokens=3,4 delims=:." %%a in ("%time%") do set /A sec=1%%a, msec=1%%b+%1
if %msec% gtr 199 set /A sec+=1, msec-=100
set lim=%sec%%msec%
:waitHere
for /F "tokens=3,4 delims=:." %%a in ("%time%") do if 1%%a1%%b lss %lim% goto waitHere
exit /B

最短精确等待时间完全取决于计算机的速度。例如,在我的情况下,小于5厘秒的等待时间总是等待更多时间。如果我使用从5厘秒开始的等待时间,则时间是准确的。

编辑:我稍微修改了程序,以便在等待时间较短的情况下使其更精确,现在它在我的计算机上精确到3厘秒!

您必须注意,最短精确等待时间还取决于批处理文件的大小;如果文件很大,最小精确时间会增加......

答案 1 :(得分:0)

您可以使用%time%变量并计算差异 在伪代码中它看起来像这样。

set startTime=%time%

:wait
set now=%time%
if now-startTime < waitTime goto wait

Btw外部程序在这里不起作用,因为加载/启动时间不可预测,并且可能比等待时间长得多。

答案 2 :(得分:0)

这可能会做,你想要的是什么:

@echo off
echo %time%
for /L %%i in (1,1,50) do ( echo %time% )>nul
echo %time%

例如连续三次运行:

C:\>t
12:15:20,74
12:15:20,75

C:\>t
12:15:21,22
12:15:21,22

C:\>t
12:15:21,69
12:15:21,71

如你所见,第一次运行给你“约”10ms,第二次运行给你“约”0ms,第三次给你“约”20ms。 没什么可靠的......

btw:如果你用echo %time%取代echo time,情况会越来越糟......