batch-file - 如果返回错误,我如何打破我的 For 循环
问题描述
.sql
当一个或多个.sql
脚本文件的文件夹中的脚本发生任何错误时,我必须中断 sqlcmd 批处理命令。
for %%G in (*.sql) do sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%G"
IF %ERRORLEVEL% ==1 EXIT /b
这个命令一个一个(按顺序)执行文件夹中的所有文件.sql
我的文件夹中有两个脚本文件;第一个脚本在执行时返回错误,这就是我想中断执行的地方,但它不会中断并继续执行文件夹中的第二个脚本。
解决方案
由于您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
,因此预计您的命令不会产生负值。(这种语法的一个很好的副作用是它不需要延迟变量扩展,这对于像这样的条件是必需的if !ErrorLevel! neq 0
。)
一种更好更简单的方法是使用条件执行操作符||
,它检查前面命令的退出代码(在大多数情况下与 相同ErrorLevel
)并仅在非零值的情况下执行以下命令:
for %%G in (*.sql) do (
sqlcmd -b /S "ServerInstance" /d "DBName" -U "Username" -P "Password" -i "%%~G" || exit /B
)