批处理文件中用于命令链的多行 && 组合运算符

批处理文件中用于命令链的多行 && 组合运算符

我懂了此运算符在 Windows 中用于(也可能在 Linux 中?)将多个命令链接/组合到一行中。只要前面的命令成功完成(退出代码为 0),命令就会一个接一个地执行。

但是,我不明白它是否可以在批处理文件中使用,在批处理文件中,您可以逐行指定命令。在这种情况下,如何实现相同的效果?如何拆分cmd1 && cmd2 && cmd3成多行? 如何终止

cmd1
cmd2
cmd3

第一个命令一旦失败?

我还想知道运营商的名称,以便以后自己找到此类问题的答案。

答案1

cmd1 && cmd2 && cmd3

可以写成多行,例如

cmd1
if not errorlevel 1 cmd2
if not errorlevel 1 cmd3

每个命令的执行都依赖于前一个命令的结果

答案2

在 GNU/Linux 中,我可以将命令拆分cmd1 && cmd2 && cmd3成脚本文件中的多行(例如为了便于阅读),如下所示:

cmd1 &&
cmd2 &&
cmd3

答案3

它们的区别是:

cmd1
cmd2
cmd3

将单独触发每个命令,并且如果在其中一个命令完成之前按下Ctrl+键,则允许终止批处理作业。c

然而

cmd1 && cmd2 && cmd3

将一个接一个地启动命令,但是,不看脚本/一次性启动。

进一步的例子,

以第一个例子为例,如果您在 cmd1 运行时编辑脚本并将 cmd2 更改为 cmd3,则它将在 cmd1 完成时加载 cmd3。

在 Linux 上,如果我这样做,ifdown eth0我将丢失我的 ssh 会话,因此,我改为ifdown eth0 && ifup eth0链接命令。

如果您想针对失败采取一些措施,您应该查看 if 语句和开关以及返回代码和错误级别。林基

答案4

对于批处理文件,需要在每个条件操作 && (或 ||)后添加一个 ^ 分隔符。例如:

echo 1 && ^
echo 2 && ^
copy >null && ^
echo 4

相关内容