Поскольку у вас есть запрос 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
)