2022年5月
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 28
29 30 31        
無料ブログはココログ

« 起動されたら自身のバッチファイルを最小化で起動し直すバッチファイル | トップページ | WSH以外のホスト環境でのWScript.Sleep()の代替関数 »

2007年4月20日 (金)

バッチファイル自身の実行結果をファイルに残すバッチファイル

バッチファイルをCMD/Cで起動するコマンドラインを作れば、
バッチファイルの実行結果をファイルに残すことは出来ます。
しかし、バッチファイルだけで、ダブルクリックなどで、
そのまま起動して、自身の実行結果をファイルに残すことは
出来ません。
そこを、起動されたら自身の実行結果をファイルに残します。

(方式-1)

バッチファイルの先頭に以下の3行を付加します。

call :main >"%~dp0LOG.TXT" 2>&1 <nul %*
goto :eof
:main

ここでは、バッチファイルと同じフォルダの"LOG.TXT"を指定しています。
ファイル名や上書き/追加書き、標準エラーを別ファイル、は好きにしてください。

もし、バッチファイル内のコマンドで、コンソールに出力したり、
コンソールから入力するときは、
>&3
2>&3
<&3
のようにリダイレクトしてください。

コンソールから入力するときは、<nul を取り除いてもよい。

%0は、:mainになります。
バッチファイル内で%0を使用しているときは、次の方法がよいかも。
%~f0などは、バッチファイル名に展開されます。

(方式-2)

バッチファイルの先頭に以下に1行を付加します。

if not "%~0"=="%~dp0.\%~nx0" "%~dp0.\%~nx0" >"%~dp0LOG.TXT" 2>&1 <nul %*

自身のバッチファイルを再帰呼び出ししています。
ここで、リカージョンを防止するために、
バッチファイルのパス表記を細工(非正規化/冗長化)しています。
これには、"%~dp0.\%~nx0"のほか、"%~f0\..\%~nx0"も使えます。

« 起動されたら自身のバッチファイルを最小化で起動し直すバッチファイル | トップページ | WSH以外のホスト環境でのWScript.Sleep()の代替関数 »