サンプルコード
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コマンドの使い方」みちしるべ
「コマンドプロンプトでコマンドの実行結果を直接変数に代入する方法」半熟メモ