我在 Windows 中有一个 .bat 文件,它执行三件事
cmd1 arg1 arg2
cmd2 arg3
cmd3 arg4 arg5 arg6
有时 cmd1 会失败,这没关系,我想继续执行 cmd2 和 cmd3。但我的 bat 停在 cmd1。我该如何避免这种情况?
更新为了清楚起见 - 这些不是其他 .bat 文件,而是 exe 命令。希望我不必为了实现这一点而构建 .bat 文件树。
答案1
另一个选择是使用“&”符号 ( &
)
cmd1 & cmd2 & cmd3
如果使用 double,则只有前一个命令成功完成后才会继续执行 ( %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
添加到加拿大人 Luke 的回答,如果你想让你的脚本更有条理,你可以^
在脚本的新行中继续命令链,如下所示:
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 & ...