我已经进行了大量搜索,但只在秒数单位中找到批处理文件中的等待提示(ping方法即。)。
由于我需要在两个命令之间等待10-100毫秒,所以不幸的是,这对我不起作用。
等待时间不需要“超级准确”。在我的情况下,如果它是10毫秒或12/15毫秒没有产生很大的不同,但它应该能够区分10和20之间。
我想知道是否有解决方案,如果有可能的话,只使用Windows“on on”命令/技巧,因为我想在以后在另一台机器上使用时只需要批处理以便于“安装”。
答案 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
,情况会越来越糟......