
実行可能ファイルを再起動するバッチ スクリプトを作成しました。エラーがあればログ ファイルに出力するようにしています。
私のスクリプトは
@echo on
timeout /t 03
set logfile=c:\users\administrator\desktop\C4W\Logs\status.log
echo starting system.exe at %date% %time% >> %logfile%
"./system.exe" -connection "sql instance" -model "model number" -username "admin" -password "" -id 2 >> %logfile%
Pause
Exit 0
ご覧のとおり、実行可能ファイルは SQL インスタンスと SQL データベース内のモデルに接続しています。バッチ ファイルを実行すると、画面に「入力は有効な Base-64 文字列ではありません。Base-64 以外の文字、2 つ以上のパディング文字、またはパディング文字の間に空白以外の文字が含まれています」というエラーが表示されます。ただし、ログ ファイルにはこのエラーは表示されず、実行可能ファイルが日付と時刻を表示して実行されたことだけが示されます。>>& %logfile% に & 記号を入れてみましたが、cmd ウィンドウにエラー メッセージが表示されず、ログにも表示されません。
私がどこを間違っているのか分かる人はいますか?
答え1
コマンドのエラー出力を標準出力とともにログファイルにリダイレクトするには、>>logfile.txt 2>>&1
次のようにコマンドに追加します。
yourcommand.exe >>logfile.txt 2>>&1
この2>>&1
構文は、StdOut ストリームと SteErr ストリームを「結合」してログ ファイルにリダイレクトするために必要です。