2013-09-26 21 views
1

我已經密集地分類,但是隻能以秒爲單位在批處理文件中找到等待提示(即ping方法)。毫秒(!)批量等待使用沒有外部?

因爲我需要在兩個命令之間等待10-100毫秒之類的東西,這對我不起作用。

等待時間不需要「超級準確」。在我的情況下,如果它是10ms或12/15ms沒有什麼大的差別,但它應該能夠區分10和20。

如果有解決方案,並且以任何方式,只使用窗口「板載」命令/技巧,因爲我希望在稍後在另一臺機器上使用該批次時便於「安裝」。

+0

我不認爲,它的分辨率可能小於100ms。試試:'@echo off:loop echo%time%goto loop'(抱歉,評論中沒有換行符,但我想,你知道,在哪裏設置它們)。你是否看到逗號之後的第二個數字(10ms)不連續計數? (順便說一句:大約60到70回聲給你「約」100毫秒 - 這並不意味着,6至7會給約10毫秒......) – Stephan

回答

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釐秒左右的時間內就精確了!

您必須注意,最小的精確等待時間還取決於批處理文件的大小;如果文件很大,最小精確時間會增加...

+0

+3釐秒/ -0釐秒。好於預期... – Stephan

0

您可以使用%time%變量並計算差異。
在僞代碼中,它看起來像這樣。

set startTime=%time% 

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

順便說一句外部程序將無法在這裏工作,作爲加載/起始時間是不可預測的,可以作爲您WAITTIME更長的時間。

+0

將實驗的答案。謝謝大家! – jwka

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 

正如你看到的,第一次運行爲您提供了「關於」 10毫秒,第二次運行提供了你「約」0ms,第三個給你「約」20ms。 沒有可靠...

順便說一句:如果你有echo time還將進一步惡化取代echo %time% ...

+0

謝謝!好信息..會嘗試! – jwka

+0

(1,1,300)將使事情更加可靠:50 ... 80毫秒 – Stephan