• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バッチでイベントログ出力したい)

バッチでイベントログ出力する方法

このQ&Aのポイント
  • Windows2003でバッチファイルにてコマンドを実行し、エラーの場合はイベントログに出力する方法について解説します。
  • エラーメッセージを実際のコマンド実行時のエラーメッセージとして入れ込む方法についてアドバイスをお願いします。
  • エラーメッセージを複数行入れる方法がわからず、うまく実装できないので、助けてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

変数に複数行を入れる方法は正式にはないです。Windows2003Serverでは確認してませんが、XPでは下記で動きます。なお、for /f の仕様でファイル読み取り時に空行は無視されます。 注意としては、set MSG=!MSG!^ の次の行は空行(改行だけの行)にすることです。 また細かいテストはしてないので、読み取りファイル中に、CMDの特殊文字があると細工しないと駄目かも。 rem 変数の遅延展開をオンにする setlocal enabledelayedexpansion rem 1行目をMSGにセット for /f "delims=" %%A in (file.log) do set "MSG=%%A"&goto NEXT :NEXT rem 1行目を読み飛ばして2行目以降をサブルーチンに渡してつなぐ for /f "skip=1 delims=" %%A in (file.log) do call :SUBRTN "%%A" eventcreate /ID 100 /L system /SO Cmd /T ERROR /D "!MSG!" goto :EOF :SUBRTN rem MSGに改行をはさみながらセット set MSG=!MSG!^ %~1 goto :EOF

syun8079
質問者

お礼

ありがとうございます。 遅延展開というものを知りませんでした。 以下のバッチだと改行が入った変数にならないのですがどのような 違いがあるのでしょう。 ---------------------------------- @echo off rem 変数の遅延展開をオンにする setlocal enabledelayedexpansion for /f "tokens=*" %%A in (file.log) do ( set MSG=!MSG!^ %%A ) echo %MSG% ---------------------------------- バッチではなくコマンドプロンプト上で直接 set msg=aaa^ bbb というように実行してもaaaしか入っていません。 何か条件があるのでしょうか。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>以下のバッチだと改行が入った変数にならないのですがどのような違いがあるのでしょう。 改行は入ってますが、echo %MSG% だと、echoの時に改行で文が切れます。 echo !MSG! としてください。

syun8079
質問者

お礼

ありがとうございます。 無事表示できました。

関連するQ&A

専門家に質問してみよう