0

ここで、このちょっとしたコードを見つけました: 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 時間形式のままで、計算でエラーが発生する場合があります。

4

2 に答える 2

0

古い質問ですが、おそらく括弧のブロックがあり、括弧内の変数を変更するときは、遅延展開を使用する必要があります。

これを実行して違いを調べます。

@echo off
set a=nothing
   if z==z (
      set a=b
      echo %a%
   )
pause
setlocal enabledelayedexpansion
set a=nothing
   if z==z (
      set a=b
      echo !a!
   )
pause
于 2014-02-20T08:03:48.883 に答える