サンプルコード
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@echo off
set f=ログファイルの名前.txt
set p="起動時間を記録するソフトのパス"
set s=開始時のコメント
set e=終了時のコメント
echo タイムスタンプ
for /f "usebackq tokens=*" %%a in (`date /t`) do set d=%%a
for /f "usebackq tokens=*" %%a in (`time /t`) do set t=%%a
echo %d% %t% %s% >> %f%
echo 対象ソフトを実行...
start "" /wait %p%
echo タイムスタンプ
for /f "usebackq tokens=*" %%a in (`date /t`) do set d=%%a
for /f "usebackq tokens=*" %%a in (`time /t`) do set t=%%a
echo %d% %t% %e% >> %f%
rem 変数の削除
set f=
set p=
set s=
set e=
set d=
set t=
解説
start "" /wait "起動するソフトのパス"
- waitオプションをつけることでソフトを起動したときにバッチファイルの実行を一時停止させ、ソフトを終了したときにバッチファイルの実行が再開するようにしています。
startコマンドは初めの""をタイトル指定オプションとして扱いますが、起動するソフトのパスも""で囲う必要があります。(正確にはソフトのパスがスペースを含む場合に必要です)
そのため、初めの""がないとソフトのパスがタイトルオプションとして扱われてしまうのです。 FOR %変数 IN (セット) DO コマンド [コマンド パラメータ]
- (セット)を%変数に代入して、コマンドのパラメータに%変数を使用することで(セット)に含まれる全ての要素に対してコマンドを実行できます。
(セット)はファイル名や文字列です。ワイルドカードを使用して複数のファイルを指定することができます。
変数は%a~%z、%A~%Zが使用可能で、バッチファイルで使用するときは%%aのように%を二つつける必要があります。 FOR /F "usebackq" %変数 IN (`コマンド`) DO コマンド [コマンド パラメータ]
- usebackqオプションを指定して、(セット)の文字列を逆引用符で囲まむことで文字列が`コマンド`として扱われるようになります。
(逆引用符は[shift]+[@]で入力)
このとき、%変数には`コマンド`の実行結果が代入されるため、その実行結果をDO コマンドの引数として処理することができます。
これによって、任意の変数にコマンドの実行結果を代入すています。
forの%変数にコマンドの結果が代入されるのですが、この%変数はforの中でしか使えないため、setコマンドで環境変数を作ってそれに代入する必要があります。
forコマンドはオプションとの組み合わせによってさまざまな機能を持っていて、以下が今回利用しているオプションです。
「意外に知らないstartコマンドの使い方」みちしるべ
「コマンドプロンプトでコマンドの実行結果を直接変数に代入する方法」半熟メモ
以下、駄文
「現在プレイしているゲームのプレイ時間を知りたい。でもゲーム内にはプレイ時間を表示する機能がない」
何か方法はないかと考えたところ思いついたのがbatファイルを使うことでした。
私が実際に使用しているbatファイルは自作プログラムで日時の出力を行っています。
また、ソフトを立ち上げる前にメモ帳を立ち上げるためのstartコマンドを追加しています。
自作ソフトを使っている理由はExcelで集計するときに楽なように日付、時刻、コメントを1行で出力したかったからです。
単純にコマンドを並べただけではコマンドごとに改行されてしまうのです。
コマンドの実行結果を変数に代入できれば、と思い探したところ見つかったのがこのforを使った方法でした。
プログラムの実行を監視するソフトを探せばたくさん出てくるので、それを使うのが楽なのでしょうがbatファイルを使うことにもメリットはあります。
このbatファイルを通して監視対象ソフトを起動するだけでよいので常駐させる必要がありません。メモリとCPUに優しい。
また「ソフトを実行する」「起動時と終了時に時間をテキストファイルに書き込む」と必要最低限の機能のみなので動作が軽いです。
さらに、ただのbatファイルなのでカスタマイズ可能です。
まあ、最後にExcelなどで集計する必要があるところは問題点ですね。
0 件のコメント:
コメントを投稿