批次檔中的命令執行順序

批次檔中的命令執行順序

我可以創建一個批次文件,僅在成功執行上一個命令後才執行命令嗎?

答案1

取決於你所說的成功是什麼意思。如果想檢查是否foo.exe沒有回傳任何退出代碼除 0 之外,使用:

@echo off
start /wait foo.exe
if errorlevel 0 (
  start /wait bar.exe
)

返回退出代碼bar.exe後運行。如果您正在測試的應用程式是控制台應用程式而不是桌面應用程序,則可以忽略。foo.exe0start /wait

更多相關資訊:如何從 Windows 命令列取得應用程式退出程式碼?,在答案中塞繆爾·倫克特蓋瑞

答案2

除了 Hex 發布的錯誤等級解決方案並透過 Michael 的評論進行改進。

對於您想做的事情來說,這甚至更快。

第一個命令 && 第二個命令

只有當第一個指令成功時才會執行第二個指令。即如果第一個命令沒有回傳錯誤。

在下面的範例中,dir asfsds 傳回該輸出,但也傳回錯誤

如果你執行 dir asdfsss & blah 那麼無論第一個指令 (dir sdsdf) 是否回傳錯誤,它都會執行 blah。

但是,如果您在它們之間使用 && 運行它們,那麼如果第一個錯誤,則不會運行第二個。它是基於布林代數的思想,如果 A 為真且 B 為真,則 A AND B 為真。因此,要找出 A 和 B 是否為真,您可以檢查 A 和 B,或者您可以「懶惰」或高效,只檢查其中一個,如果它為假,您就知道整個表達式為假。如果這是真的,那麼你必須檢查另一個。因此,A && B 檢查 A,並且僅在必須檢查 B 時才檢查 B,因此僅在 B 為 true 時才檢查 B。但是布林代數概念應用於命令,因此它運行第一個命令,第一個命令可能會返回錯誤,也可能不會返回錯誤,如果第一個命令確實返回錯誤,那麼它不會嘗試運行並簽入第二個命令,如果第一個沒有回傳錯誤,那麼它將嘗試第二個。毫無疑問,如果兩者都為真,則表達式本身將傳回真(無錯誤),否則傳回假(錯誤)。

C:\Users\user>dir asdfsdf
磁碟機 C 中的磁碟區沒有標籤。卷序號為 B411-D580

C:\Users\使用者目錄

找不到檔案 <---------------- 請參閱上面 dir asdfdsds 的輸出

C:\Users\user>dir asdfsdf & echo
磁碟機 C 中的磁碟區沒有標籤。卷序號為 B411-D580

C:\Users\使用者目錄

檔案未找到 a <--- 看到“echo a”運行

C:\Users\user>dir asdfsdf && echo
磁碟機 C 中的磁碟區沒有標籤。卷序號為 B411-D580

C:\Users\使用者目錄

文件未找到

C:\使用者\使用者>

如果您執行了 dir filethatexists && echo a 那麼您將看到第一個命令成功運行,然後 echo a 運行。類似地 echo a && echo b

相關內容