我有一个用于运行多个SQL脚本并将其输出记录在单个文本文件(SQL_results.txt)中的批处理。这是将运行脚本并在输出开头检查错误结果的块(错误将始终在一行上,以&#34开头; Msg"):
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限制并且&#34; Msg ...&#34;线可能并不总是第一个。
我试过这个测试来检查一个变量,但是它只会为每一行写下输出的最后一行:
for /f "delims=" %%i in ('SQLCMD command_to_run_a_script') do (set VAR=%%i & ECHO %VAR%>> SQL_results.txt)
这样的事情可以通过逐行解析结果来尝试在变量中找到以&#34; Msg&#34;开头的结果,而不是必须创建&amp;删除每个脚本的文本文件?
答案 0 :(得分:1)
由于变量只能容纳一行,所以我不太清楚你的意图。
仅将有错误的行过滤到文件中:
SQLCMD command_to_run_a_script|Findstr "^MSG" > error.txt
将MSG行存储在数组中并在末尾输出
@Echo off&Setlocal EnableDelayedExpansion
Set cnt=0
For /f "delims=" %%A in (
'SQLCMD command_to_run_a_script ^|Findstr "^MSG" '
) Do (
Set /A cnt+=1
Set "MSG[!Cnt!]=%%A"
)
Echo had %cnt% MSG lines
For /l %%C in (1,1,%cnt%) Do Set MSG[%%C]