如何在 Command 中依序執行指令

同事問說他有幾個 .bat 指令檔,想要上一個 .bat 完成再開始執行下一個 .bat。這樣的需求在 powershell 中很常見,第一個念頭就是問看看能不能用 powershell 寫,但定神細想,難道只能用 powershell 嗎?! 也許網路上的大神們有其他更漂亮的解法,就來看看可以怎麼做吧

基本環境

  1. 第一隻 bat:1.bat

    • 印出 start1
    • sleep 5 秒
    • 印出 end1

      echo start1
      timeout /t 5
      echo end1
      
  2. 第一隻 bat:2.bat

    • 印出 start2
    • sleep 5 秒
    • 印出 end2

      echo start2
      timeout /t 5
      echo end2
      

讓 command 循序執行

  • 使用 && 串接指令

    1.bat && 2.bat
    
  • 效果

    1. 執行 1.bat 並等待倒數結數

      11bat

    2. 1.bat 完成後執行 2.bat 並等待倒數結數

      22bat

    3. 指令全部完成

      3done

其他 command 好用符號指令

符號說明範例
>將指令執行結果寫至檔案;
檔案不存在時會自動建立;
如果檔案已存在會直接覆寫
echo YowkoTest > test.txt
>>將指令執行結果加至檔案末端;
檔案不存在時會自動建立
echo YowkoTestAppend >> test.txt
<將檔案內容當做指令輸入來源more < test.txt
¦將指令 1 執行結果當做指令 2 輸入參數echo y¦del test.txt
&將兩個指令合併執行,先執行指令 1 接著執行指令 2DIR Z:\ & 2.bat (z 不存在,2.bat 仍會執行)
&&合併執行,指令 1 執行成功後接著執行指令 2DIR Z:\ && 2.bat(z 不存在,2.bat 不會執行)
¦¦只有在指令 1 執行失敗時才執行指令 2DIR Z:\ ¦¦ 2.bat ((z 不存在,2.bat 才會執行)
@通常放在 bat 檔的第一行,用來關閉顯示指令@echo off

心得

雖然現在比較常使用 PowerShell,不過 command 指令通用性還是比較高,語法的多樣性或許比不上 PowerShell,如果懂得充份利用還是可以完成很多事的

參考資訊

  1. DOS is dead, long live the command line
  2. 如何在批次檔(Batch)中實現 sleep 命令讓任務暫停執行 n 秒
  3. Windows Command Prompt in 15 Minutes
  4. Redirection