我已經密集地分類,但是隻能以秒爲單位在批處理文件中找到等待提示(即ping方法)。毫秒(!)批量等待使用沒有外部?
因爲我需要在兩個命令之間等待10-100毫秒之類的東西,這對我不起作用。
等待時間不需要「超級準確」。在我的情況下,如果它是10ms或12/15ms沒有什麼大的差別,但它應該能夠區分10和20。
如果有解決方案,並且以任何方式,只使用窗口「板載」命令/技巧,因爲我希望在稍後在另一臺機器上使用該批次時便於「安裝」。
我已經密集地分類,但是隻能以秒爲單位在批處理文件中找到等待提示(即ping方法)。毫秒(!)批量等待使用沒有外部?
因爲我需要在兩個命令之間等待10-100毫秒之類的東西,這對我不起作用。
等待時間不需要「超級準確」。在我的情況下,如果它是10ms或12/15ms沒有什麼大的差別,但它應該能夠區分10和20。
如果有解決方案,並且以任何方式,只使用窗口「板載」命令/技巧,因爲我希望在稍後在另一臺機器上使用該批次時便於「安裝」。
@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釐秒左右的時間內就精確了!
您必須注意,最小的精確等待時間還取決於批處理文件的大小;如果文件很大,最小精確時間會增加...
+3釐秒/ -0釐秒。好於預期... – Stephan
您可以使用%time%變量並計算差異。
在僞代碼中,它看起來像這樣。
set startTime=%time%
:wait
set now=%time%
if now-startTime < waitTime goto wait
順便說一句外部程序將無法在這裏工作,作爲加載/起始時間是不可預測的,可以作爲您WAITTIME更長的時間。
將實驗的答案。謝謝大家! – jwka
這可能會做,你想要什麼:
@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毫秒,第二次運行提供了你「約」0ms,第三個給你「約」20ms。 沒有可靠...
順便說一句:如果你有echo time
還將進一步惡化取代echo %time%
...
我不認爲,它的分辨率可能小於100ms。試試:'@echo off:loop echo%time%goto loop'(抱歉,評論中沒有換行符,但我想,你知道,在哪裏設置它們)。你是否看到逗號之後的第二個數字(10ms)不連續計數? (順便說一句:大約60到70回聲給你「約」100毫秒 - 這並不意味着,6至7會給約10毫秒......) – Stephan