呼叫外部程式與副程式 常用的呼叫外部程式有下列幾種方式 call 外部程式 從批次檔中呼叫外部程式並可傳遞參數,在同一個 shell 環境下,可共同存取相同的環境變數。 rem test.cmd @echo off call test1.cmd hello pause rem test1.cmd @echo off echo %1 timeout 6 cmd /c 外部指令 呼叫一個新的shell程式(cmd)並於指令執行完成後結束這個 shell ,返回原來的shell環境,外部程式執行在新的shell之中,因此存取的環境變數與原程式不同,有區域變數的遮蔽效果 @echo off cmd /c notepad.exe exit 留意上述範例執行情形,在notepad.exe關閉以前,不會執行 exit 指令,因為指令尚未結束,還留在新的shell當中。 開始一個新視窗執行程式 => start [program] [parameters] 因為 cmd /c 具有同步特性(會等外部程式執行完畢),因此不太適合呼叫需與使用者互動的視窗程式,因為命令提示視窗會因等待而保持開啟,所以適合改用 start 來呼叫執行。 @echo off start notepad.exe exit 使用 /wait 也可以改讓 start 具有同步特性,詳情參考 start /? 副程式呼叫 批次檔的副程式呼叫也是利用 call 指令,不同的是 call 的對象不是外部程式 ,而是相同檔案中的標籤,也可以傳遞參數。 因為批次檔的副程式僅利用標籤代表區塊的開始,因此副程式都放在程式的尾部,之後就不要寫任何命令敘述了,代表區塊的結束。 因為批次檔循序讀取的特性,就算副程式沒有被呼叫,也會被當作標籤一般順序執行下來,因此在副程式之前通常要加上 goto :EOF 強制結束批次檔。 call :標籤 參數1 參數2... @echo off rem for迴圈使用方式請參考本手冊相關章節 for %%i in (*.dll *.exe) DO CALL :SubRoutin "%%i" pause goto :EOF :SubRoutin echo %1, %~n1, %~x1
留言
張貼留言