错误后如何使我的.bat文件继续


30

我在Windows中有一个.bat文件,它可以完成三件事

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

有时cmd1可能会失败,这很好,我想继续执行cmd2和cmd3。但是我的蝙蝠停在cmd1。如何避免这种情况?

为了清楚起见进行更新 -这些不是其他.bat文件,它们是exe命令。希望我不必为了实现此目的而构建.bat文件树。


您应该可以使用启动命令cmd /C
Der Hochstapler 2013年

1
您需要显示不起作用的特定代码示例。如果命令失败并出现错误,批处理文件通常不会自动终止。如果存在语法错误,批处理文件会终止。如果您的代码因exe错误而退出,则您的代码中必须存在引起该行为的逻辑。
dbenham

Answers:


18

另一种选择是使用ampstand(&

cmd1 & cmd2 & cmd3

如果您使用double,则只有在前一个命令成功完成(%ERRORLEVEL%==0)后,它才会继续运行

cmd1 && cmd2 && cmd3

如果您使用双管道(||),则只有前一个命令以错误代码(%ERRORLEVEL% NEQ 0)完成时,它才会运行下一个命令

cmd1 || cmd2 || cmd3


我也可以在传递args时这样做吗?我只是尝试了,但没有奏效。
ConfusedNoob 2013年

@ConfusedNoob我一直在做...我有一个CHKDSK带有参数的命令,该命令有效。我输入check D: & check E: & check F:,它可以工作。BAT文件包含的参数包括/perf /f /r /b /scan开关
Canadian Luke REINSTATE MONICA 2013年

2
好一个!带给我一个想法,如何执行多次重试:cmd || cmd || ...将执行下一个cmd,直到成功
iTake 2013年

1
这使长脚本不可读,还有其他方法吗?
2014年1

1
@CanadianLuke好批处理是Windows批处理框架。您如何以非交互方式运行数百个命令?电源外壳中是否有更好的方法?搬到那里会更糟吗?
2014年1

11

假定cmds是其他.bat文件,则将如下命令堆叠:

 call cmd1
 call cmd2
 call cmd3

10

这为我工作:

cmd.exe /c cmd1 arg1
cmd2
...

这用于cmd.exe在Windows命令解释器的新实例中执行命令,因此失败的命令不会中断批处理脚本。该/c标志告诉解释器在命令完成执行后立即终止。

cmd2即使第一个命令失败也执行。有关cmd /?更多信息,请参见Windows命令提示符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.