как мне сделать так, чтобы мой .bat файл продолжил работу после ошибки

как мне сделать так, чтобы мой .bat файл продолжил работу после ошибки

У меня есть .bat-файл в Windows, который делает три вещи

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Иногда cmd1 может дать сбой, и это нормально, я бы хотел продолжить и выполнить cmd2 и cmd3. Но мой bat останавливается на cmd1. Как мне этого избежать?

Обновлятьдля ясности - это не другие .bat файлы, это exe команды. Надеюсь, мне не придется строить дерево .bat файлов только для этого.

решение1

Другой вариант — использовать амперстенд ( &)

cmd1 & cmd2 & cmd3

Если вы используете двойную команду, она продолжится только в том случае, если предыдущая команда завершится успешно ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Если вы используете двойной канал ( ||), следующая команда будет запущена только в том случае, если предыдущая завершится с кодом ошибки ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3

решение2

Мне это помогло:

cmd.exe /c cmd1 arg1
cmd2
...

Это используется cmd.exeдля выполнения команды в новом экземпляре интерпретатора команд Windows, поэтому неудачная команда не прерывает пакетный скрипт. Флаг /cсообщает интерпретатору о необходимости завершить работу, как только команда завершит выполнение.

cmd2выполняется даже если первая команда не выполнена. См. cmd /?в командной строке Windows для получения дополнительной информации.

решение3

Предположив, что cmds — это другие файлы .bat, расположим команды следующим образом:

 call cmd1
 call cmd2
 call cmd3

решение4

Добавить кОтвет канадца Люка, если вы хотите, чтобы ваш скрипт был более организованным, вы можете использовать , ^чтобы продолжить цепочку команд в новой строке вашего скрипта, например так:

scoop install windows-terminal & ^
scoop install joplin & ^
scoop install neovim & ^
scoop install autohotkey & ^
... & ^
scoop update -a

Вместо того, чтобы быть уродливым

scoop install windows-terminal & scoop install joplin & scoop install neovim & ...

Связанный контент