如果返回错误,如何中断For循环

时间:2019-02-28 10:14:16

标签: batch-file sqlcmd

当一个或多个.sql脚本文件的文件夹中的.sql脚本中发生任何错误时,我必须中断sqlcmd batch命令。

for %%G in (*.sql) do sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%G"
IF %ERRORLEVEL% ==1 EXIT /b

此命令一个接一个地执行文件夹中的所有文件 我的文件夹中有两个.sql脚本文件;执行中的第一个脚本返回错误,这就是我要中断执行的位置,但不会中断并继续执行文件夹中的第二个脚本。

1 个答案:

答案 0 :(得分:1)

由于循环后有if %ErrorLevel%==1查询,因此当然不会退出。

将其移入循环将解决您的问题,尽管我不会检查ErrorLevel中的1,但宁愿检查它是否不是0

for %%G in (*.sql) do (
    sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%~G"
    if not ErrorLevel 1 exit /B
)

如果遇到ErrorLevel的值1或更大,这将退出循环,因此,预计您的命令不会产生负值。 (此语法的一个很好的副作用是它不需要delayed variable expansion,而对于if !ErrorLevel! neq 0这样的条件是必需的。)


一种更好,更简单的方法是使用conditional execution operator ||,它检查前一条命令的退出代码(在大多数情况下与ErrorLevel相同),并仅在非零值的情况:

for %%G in (*.sql) do (
    sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%~G" || exit /B
)