用於批次檔中的命令連結的多行 && 組合運算符

用於批次檔中的命令連結的多行 && 組合運算符

我懂了該運算符在 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

相關內容