批处理 - 解析变量中的多行命令输出

时间:2017-08-02 23:12:36

标签: windows batch-file multiline

我有一个用于运行多个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;删除每个脚本的文本文件?

1 个答案:

答案 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]
相关问题