我有一批用於運行多個SQL腳本並將其輸出記錄在單個文本文件(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
值得注意的是輸出具有動態數量的行並且可能超過變量char限制,並且「Msg ...」行可能並不總是第一行。
這個我試過做一個變量中的檢查測試,但它只會寫輸出每一行的最後一行:
for /f "delims=" %%i in ('SQLCMD command_to_run_a_script') do (set VAR=%%i & ECHO %VAR%>> SQL_results.txt)
能像這樣被解析的結果進行逐行試圖找到一個以「Msg」開頭的變量,而不是必須創建&爲每個腳本刪除一個文本文件?
你知道數組和輸出,我敢打賭'sqlcmd'將在退出零成功,帶有錯誤的非零。檢查文檔以確保。但如果這是真的,你可以'sqlcmd command_to_run_a_script ||回聲有一個錯誤。「或類似的。如果退出代碼不可靠,您還可以'sqlcmd command_to_run_a_script | findstr/i「^ Msg」> NUL && echo輸出包含錯誤。出錯了.' – rojo
謝謝你指出,如果使用-b開關,SQLCMD確實會出錯,所以我可以使用它。 – VladP