私はそれを行うことができないと言うつもりだったが、バッチ言語は、それがために信用を与えられているよりも多くの強力ですので、ここでTIMER.BATの単純な実装です。
@echo off
setlocal
rem Remeber start time. Note that we don't look at the date, so this
rem calculation won't work right if the program run spans local midnight.
set t0=%time: =0%
rem do something here.... but probably with more care about quoting.
rem specifically, odd things will happen if any arguments contain
rem precent signs or carets and there may be no way to prevent it.
%*
rem Capture the end time before doing anything else
set t=%time: =0%
rem make t0 into a scaler in 100ths of a second, being careful not
rem to let SET/A misinterpret 08 and 09 as octal
set /a h=1%t0:~0,2%-100
set /a m=1%t0:~3,2%-100
set /a s=1%t0:~6,2%-100
set /a c=1%t0:~9,2%-100
set /a starttime = %h% * 360000 + %m% * 6000 + 100 * %s% + %c%
rem make t into a scaler in 100ths of a second
set /a h=1%t:~0,2%-100
set /a m=1%t:~3,2%-100
set /a s=1%t:~6,2%-100
set /a c=1%t:~9,2%-100
set /a endtime = %h% * 360000 + %m% * 6000 + 100 * %s% + %c%
rem runtime in 100ths is now just end - start
set /a runtime = %endtime% - %starttime%
set runtime = %s%.%c%
echo Started at %t0%
echo Ran for %runtime%0 ms
あなたは算術演算を簡素化し、もう少しのようになります。私の周りいじるし、ヨハネス・ロッセルは、測定領域の外側に算術を動かすことを提案しながら、記録のために、パックスは、文字列の分割を示すの答えに私を打ちます2番目の部分の100分の1を気にしないことで、これの全体的な正確さについて正直です。
C:> TIMER SLEEP 3
Script took 3000 ms to complete
C:>
編集:ここでは、それはあなたがスリープコマンドまたは他のいくつかの時間の無駄を持っていると仮定すると、アクションであるコメントで示唆したように、私はコードとその説明を改訂しました。
私は、NTチームがCOMMAND.COMをCMD.EXEに置き換えたとき、彼らは非常に異なったものにならないと考えていました。しかし、事実上、それはまったく新しい言語です。拡張機能が有効になっていると、古いお気に入りコマンドの多くに新しい機能が追加されています。
これらのうちの1つは、変数が発信者の環境を変更できないようにするSETLOCAL
です。もう一つはSET /A
であり、これはあなたに驚異的な計算量を与えます。私がここで使用した主なトリックは、新しいサブストリング抽出構文です。%t:~3,2%
は、t
という変数の値のオフセット3から始まる2文字を意味します。
実際のショッカーの場合は、setの完全な説明を参照してください(プロンプトでSET /?
を試してください)。恐れがない場合は、FOR /?
を見て、ファイルからテキストを解析できることに気をつけてください。
編集2:08
または09
を含むタイムフィールドの誤った処理がコメントでFrankieによって報告されました。いくつかのことを微調整し、いくつかのコメントを追加しました。
ここで私は恐らく修正するつもりはないことに注意してください。コマンドが終了する日とは異なる日にコマンドが開始された場合は、動作しません。つまり、時間に関係する数学を行い、違いを報告しますが、その違いはあまり意味がありません。
少なくともこのケースについて警告するのは簡単です。正しいことをするのは難しいです。
編集3:%h%が1桁の時間に正しく設定されていない不具合を修正しました。これは%time%が "9:01:23.45"を返すためです。スペースに気づく。 %time:= 0%を使用すると、先頭のゼロでスペースが置換され、%h%が正しく設定されます。このエラーは、スクリプトが1桁の時間から次の1桁の時間に実行された場合にのみ発生します。
shouldn」あなたは何かをした後で終わりを設定するか?それはタイプミスですか? –
さて、 "time ./myscript" – mpen
@markを在庫しているWindowsのインストールでは、timeは現在の時刻を設定または表示するCMD.EXEに組み込まれたコマンドです。 – RBerteig