我进行了深入搜索,但只在批处理文件中找到了以秒为单位的等待提示(ping 方法,即)。
由于我只需要在两个命令之间等待 10-100 毫秒,不幸的是,这对我不起作用。
等待时间不需要“超级准确”。在我的情况下,如果它是 10 毫秒或 12/15 毫秒并没有太大的区别,但它应该能够区分 10 和 20。
我想知道是否有解决方案,如果可能的话,只使用Windows“板载”命令/技巧,因为我想在稍后在另一台机器上使用时只使用批处理以方便“安装”。
我进行了深入搜索,但只在批处理文件中找到了以秒为单位的等待提示(ping 方法,即)。
由于我只需要在两个命令之间等待 10-100 毫秒,不幸的是,这对我不起作用。
等待时间不需要“超级准确”。在我的情况下,如果它是 10 毫秒或 12/15 毫秒并没有太大的区别,但它应该能够区分 10 和 20。
我想知道是否有解决方案,如果可能的话,只使用Windows“板载”命令/技巧,因为我想在稍后在另一台机器上使用时只使用批处理以方便“安装”。
@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 厘秒开始就精确了!
您必须注意,最小精确等待时间还取决于批处理文件的大小;如果文件很大,则最小精确时间会增加...
您可以使用 %time% 变量并计算差异。
在伪代码中它看起来像这样。
set startTime=%time%
:wait
set now=%time%
if now-startTime < waitTime goto wait
顺便说一句,外部程序在这里不起作用,因为加载/启动时间是不可预测的,并且可能比您的等待时间长得多。
这可能会做,你想要什么:
@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
如您所见,第一次运行“大约”10 毫秒,第二次运行“大约”0 毫秒,第三次运行“大约”20 毫秒。没有什么靠谱的...
顺便说一句:如果你echo %time%
用它来代替echo time
它会变得更糟......