1

コマンドの時間測定にバッチスクリプトを使用しています。このスクリプトは StackOverflow で見つけました。残念ながら、正しく動作しない場合があり、残念ながら私はバッチ プログラミングについてあまり知りません。うまくいくときもあれば、うまくいかないときもあるという印象を受けます。おそらく私はこれを誤解していますが、真夜中以降は正しく機能していないようです。

スクリプト:

@echo off
setlocal

rem The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99
set STARTTIME=%TIME%

rem here begins the command you want to measure
dir /s > nul
rem here ends the command you want to measure

set ENDTIME=%TIME%

echo STARTTIME %STARTTIME%

rem convert STARTTIME and ENDTIME to centiseconds

set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

echo STARTTIME %STARTTIME%

echo ENDTIME %ENDTIME%

set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100)

echo ENDTIME %ENDTIME%

rem calculating the duration is easy
set /A DURATION=%ENDTIME%-%STARTTIME%

rem we might have measured the time inbetween days
if %ENDTIME% LSS %STARTTIME% set set /A DURATION=%STARTTIME%-%ENDTIME%

rem outputing

echo DURATION: %DURATION% in centiseconds

endlocal
goto :EOF

30分前に使用していたところ、次の結果が得られました。

STARTTIME  1:29:25.17 
STARTTIME  1:29:25.17 
ENDTIME  1:29:27.82 
ENDTIME  1:29:27.82 
DURATION: 1 in centiseconds

だから線で何か

set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

この線

set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100)

間違っているようです。

それは何ですか?

よろしく、デビッド

4

1 に答える 1

4

問題は で"%STARTTIME:~0,2%-100"あり" 1"、余分なスペースがあります。(1 1)次に、プログラムは の代わりにの値を見つけようとします(101)

前の余分な 1 は、時刻を"01:29:25.17"(システムが 8 進数として解釈する 01 の代わりに 101 を与える)として出力するシステムにのみ使用する必要がありますが、時刻を次のように出力するシステム" 1:29:25.17"(1 の前のスペースに注意してください)問題があります (これは を与えます1 1)。

STARTTIME=(1%STARTTIME:~0,2%-100)*360000簡単な方法は、との 1 を削除するENDTIME=(1%ENDTIME:~0,2%-100)*360000ことですが、他のシステムで問題が発生する可能性があります。

より完全な解決策は、rem 行の後に 2 行を追加することです。

rem convert STARTTIME and ENDTIME to centiseconds

set STARTTIME=%STARTTIME: =0%

set ENDTIME=%ENDTIME: =0%

(編集:上記のAndriy Mのはるかに短い方法)


日の間の時間を測定しようとするときに問題を引き起こす可能性のあるsetものも 2 つあります。if %ENDTIME% LSS %STARTTIME% set set /A DURATION=%STARTTIME%-%ENDTIME%

于 2013-02-04T02:02:34.247 に答える