
У меня есть .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 & ...