Вложенная ошибка синтаксиса bat / cmd останавливает весь родительский поток, есть способ решить?

#batch-file

#пакетный файл

Вопрос:

Пожалуйста, посмотрите на эти два файла BAT.

nest0.bat

 @echo off

echo nest0 start.

call nest1.bat

echo nest0 done.
  

nest1.bat

 @echo off

if 1 = 1 (
    echo In nest1
)

echo nest1 done.
  

Запустите nest0.bat, и мы увидим этот результат:

 nest0 start.
= was unexpected at this time.
  

Это ужасно. Синтаксическая ошибка в nest1.bat приводит к тому, что остальные операторы в nest0.bat полностью игнорируются, и весь пакетный поток немедленно останавливается.

Я надеюсь echo nest0 done , что это может быть выполнено независимо nest1.bat от успеха или неудачи. Есть способ добиться этого результата?

Если nest0.bat можно продолжить выполнение, я могу использовать if ERRORLEVEL 1 (...) технику для проверки nest0.bat результата выполнения. Это будет очень приличный рабочий процесс.

введите описание изображения здесь

Ответ №1:

Сам пакет не выдерживает фатальной ошибки.
Но вы можете запустить второй пакетный файл в отдельном cmd.exe процесс.
Заменить call nest1.bat на cmd.exe /c nest1.bat , вот и все

nest0.bat

 @echo off
echo nest0 start.
cmd /c nest1.bat
echo nest1 done.
if %errorlevel% == 0 (
    echo nest1 was successfully
) else (
    echo nest1 failed
)