複数のSQLスクリプトを実行し、その出力を1つのテキストファイル(SQL_results.txt)に記録するバッチがあります。これは、出力の先頭にエラーの結果をスクリプトを実行し、チェックするブロックである(エラーは常に「メッセージ」で始まる、単一の行になります):変数のバッチ解析複数行コマンド出力
SQLCMD command_to_run_a_script > error.txt
set /p result=<error.txt
set result=%result:~0,3%
if ""%result%""==""Msg"" exit
type error.txt >> SQL_results.txt
del error.txt
これは、ことは注目に値します出力には動的な行数があり、可変文字制限を超え、「Msg ...」行が必ずしも最初ではないことがあります。
私は変数にチェックを行うためのテストのためにこれを試してみましたが、それだけで、各ラインの出力の最後の行を書き込みます:
for /f "delims=" %%i in ('SQLCMD command_to_run_a_script') do (set VAR=%%i & ECHO %VAR%>> SQL_results.txt)
はこのようなものは、その結果を解析することによって行うことができます"Msg"で始まる行を見つけようとする行ごとに、&を作成する代わりに変数内でスクリプトごとにテキストファイルを削除しますか?
は、あなたが知っている最後のアレイと出力の
ストアMSGライン、私はsqlcmd'は上のゼロを終了します '賭けます成功、エラーなしで非ゼロ。必ず文書を確認してください。しかしそれが本当であれば、 'sqlcmd command_to_run_a_script ||エコーエラーが発生しました。終了コードが信頼できない場合は、 'sqlcmd command_to_run_a_script | findstr/i "^ Msg"> NUL && echo出力にエラーがありました。何かが間違っていました。 ' – rojo
-bスイッチが使用されていると、SQLCMDは本当にエラーで終了するので、これを指摘していただきありがとうございます。 – VladP