ここで、このちょっとしたコードを見つけました: https://stackoverflow.com/a/5262637/2128987
@echo off
set starttime=%TIME%
set startcsec=%STARTTIME:~9,2%
set startsecs=%STARTTIME:~6,2%
set startmins=%STARTTIME:~3,2%
set starthour=%STARTTIME:~0,2%
set /a starttime=(%starthour%*60*60*100)+(%startmins%*60*100)+(%startsecs%*100)+(%startcsec%)
:TimeThis
robocopy /e /NFL /NDL /NJH /NJS /nc /ns /np folder%rndfolder% %drvltr%:\f%dirnew%\
set endtime=%time%
set endcsec=%endTIME:~9,2%
set endsecs=%endTIME:~6,2%
set endmins=%endTIME:~3,2%
set endhour=%endTIME:~0,2%
if %endhour% LSS %starthour% set /a endhour+=24
set /a endtime=(%endhour%*60*60*100)+(%endmins%*60*100)+(%endsecs%*100)+(%endcsec%)
set /a timetaken= ( %endtime% - %starttime% )
set /a timetakens= %timetaken% / 100
set timetaken=%timetakens%.%timetaken:~-2%
echo.
echo Took: %timetaken% sec.
スタンドアロンのプログラムとして、うまく機能します。基本的に、ファイルの書き込みにかかる時間を決定するために robocopy コマンドで使用しています。
計算のために生の秒数を保持したいので、変数を 1 つ追加します。そこで、timeraw=%timetaken% を設定する余分な行を追加します。
set /a timetaken= ( %endtime% - %starttime% )
***set timeraw=%timetaken%***
set /a timetakens= %timetaken% / 100
set timetaken=%timetakens%.%timetaken:~-2%
私のバッチファイルも setlocal enableddelayedexpansion を使用しています
「開始時間」または「終了時間」が正しく計算されないことがあります。08:30:22.35 型形式の生の時間として保持され、エラーが発生します。
Invalid number. Numeric constants are either decimal (17),hexadecima (0x11), or octal (021)
: 文字のような数字以外の文字が含まれているためです。
私のバッチファイルは、特定の拷問テスト条件のファイルとフォルダーの読み取り、書き込み、削除に使用しているため、永遠に連続ループに入ります。
starttime または endtime 変数を断続的に計算しない理由は何ですか?
編集:
スクリプト全体にいくつかの変更を加えました。enabledelayedexpansion はもう必要ありません。if then ステートメントを整理し、コードを少し単純化しました。しかし、starttime または endtime 変数が HH:MM:SS.CS の raw 時間形式のままで、計算でエラーが発生する場合があります。