我想开发一个批处理脚本,它将执行放置批处理文件的文件夹中的每个.sql SQL脚本,并将日志记录到filename_sqloutput.txt文件中。 条件是:如果任何脚本提供任何错误消息,如列名不正确或表名等。脚本执行应立即停止,不应执行更多脚本。
我尝试使用以下代码:但即使脚本在输出文件中出错,它也无法正常工作。脚本执行没有停止..
需要你的帮助!!!
@echo off
for /f %%a IN ('dir /b *.sql') do (call sqlcmd -S AMRVSP000000318 -i %%a -o"%%~na_sqloutput.txt"
findstr "Msg" %%~na_sqloutput.txt >nul & if %errorlevel% EQU 1 (exit) else (echo Successfully executed %%~na_sqloutput.txt)
)
pause
答案 0 :(得分:0)
....如果errorlevel 1(退出......
%errorlevel%
是遇到errorlevel
时for
的初始值。
请参阅有关使用delayed expansion
作为另一种解决方案的无休止的SO文章。
此语法表示"如果当前errorlevel
为1或更大,则其他地址为#34;
答案 1 :(得分:0)
FINDSTR will set %ERRORLEVEL% as follows:
- 0(False)在至少一个文件的至少一行中找到匹配。
- 1(True)如果在任何文件的任何行中找不到匹配项(或者根本找不到该文件)。
- 2语法错误
无效开关仅在错误流中打印错误消息。
此外,请关注EnableDelayedExpansion文章并将脚本重写为更具可读性的结构:
@echo off
SETLOCAL EnableExtensions EnableDelayedExpansion
for /f %%a IN ('dir /b *.sql') do (
call sqlcmd -S AMRVSP000000318 -i %%a -o"%%~na_sqloutput.txt"
findstr "Msg" "%%~na_sqloutput.txt" 2>NUL
if !errorlevel! EQU 0 (
echo error occured %%~na_sqloutput.txt
rem pause to see error
pause
exit /B
) else (
echo Successfully executed %%~na_sqloutput.txt
)
)
pause