— Posted in 電腦資訊

[轉錄]如何在Windows下撰寫批次檔,簡化常態性工作?

來源:http://www.ithome.com.tw/node/47779

當Windows逐漸取代DOS系統,圖形化的物件點選設定逐漸取代文字介面,批次檔的應用也相對減少。不過,這類的應用並沒有完全消失,如果善用批次檔,不但可以簡化工作流程,而且可以搭配Windows控制台的「排定的工作」設定排程,讓程式定時自動完成。

按讚加入iThome粉絲團
文/李延華 | 2008-03-05發表

在DOS盛行,甚至到Windows 95/98的年代,批次檔的應用仍相當普遍,舉例來說,那時的電腦幾乎都有一個Autoexec.bat檔,是在開機後、圖形使用者介面啟動前執行,用以呼叫或設定必要的系統程式或環境參數。

當Windows逐漸取代DOS系統,圖形化的物件點選設定逐漸取代文字介面,批次檔的應用也相對減少。不過,這類的應用並沒有完全消失,事實上,如果你存在一些每日必須執行而且重複性高的工作,那麼善用批次檔,不但可以簡化工作流程,而且可以搭配Windows控制台的「排定的工作」設定排程,讓程式定時自動完成。

透過Windows控制台的「排定的工作」,將批次檔加入排程,即可讓批次工作依使用者的設定,在固定的時間與周期定時執行。

批次檔是純文字格式,副檔名為「.bat」
在DOS系統下,有執行檔(.exe和.com)及批次檔(.bat)等檔案類型,可以使DOS執行某些工作。例如command.com、 edit.com、copy.exe或mem.exe。

這些執行檔是以編譯或組合語言寫成,一般使用者不會花時間學習編寫這類程式,但批次檔是一連串的 DOS 內部、外部指令或是執行程式的組合,因此只要懂得這些指令,再加上簡單的語法,就可以寫出批次檔。

批次檔必須是純文字檔,檔案要以「.bat」為副檔名,我們可以使用文書編輯軟體編寫內容,例如Windows內建的「記事本」或UltraEdit。每一項指令要在一行中完成,不能分成兩行,而每行最多127個字。

檔名除了Autoexec.bat以外,批次檔的檔案名稱可由使用者自訂,但是最好避免與DOS指令同名,例如copy.bat、del.bat、dir.bat或exit.bat等。

此外,批次檔的內容是用DOS指令,加上特定語法寫成,指令包括DOS的內部及外部指令,例如call、choice、echo、for…in…do、goto、if、if (not) exit、pause、rem、shift等。若是指令錯誤會有「Bad command or file name」的訊息回應,語法錯誤則會回應「Syntax error」。

執行批次檔,只需在命令提示列鍵入主檔名,例如Menu.bat或menu。而在Windows環境下,只需滑鼠點兩下,即自動執行。

在批次檔執行過程中,使用者按[Ctrl]+[C]鍵或是[Ctrl]+[Break]鍵可隨時終止程序。螢幕會顯示「Terminate batch job (y/n)? 」,按[Y]鍵即終止批次檔,回到DOS的提示號;按 [N]鍵取消;按[Ctrl]+[C]鍵,則會繼續執行。

搭配Windows排程,可定時自動執行
如果批次檔的執行具定時及重複的特性,例如每日的備份作業,那麼搭配Windows控制台中的「排定的工作」,利用「排程工作精靈」,以一連串精靈化的步驟,預先設定批次檔、執行周期、時間和使用者的名稱及密碼,即可讓電腦自動化定時執行批次作業,避免人為遺忘或漏失的風險。

指次檔的語法很多,但多數人在長久操作Windows的使用環境下,早已不複記憶,這方面我們提供簡單的常用指令列表。此外DOS指令可搭配的參數也很繁多,如果希望取得相關說明,可在命令提示列,於指令之後加上「/?」再執行,例如copy /?,系統即提供相關說明。文⊙李延華

常用的批次指令
指令   說明 範例 範例說明
echo  顯示此命令後的字元 echo 結束 系統將顯示「結束」
call  呼叫另一個批次檔 call a.bat 系統執行a.bat的內容
pause 暫停批次處理的執行,待使用者按任意鍵後繼續。 Pause 螢幕顯示「Press any key to continue…」的提示,待使用者按任意鍵後繼續
rem 註解,不執行。    
if [not] “參數” ==”字串” 參數如果等於(not表示不等於)指定的字串,則執行命令,否則執行下一行指令。 if “%1″==”a” format a: 如果使用者輸入的第一個參 數是”a”,就格式化a槽磁碟
if [not] exist[路徑\]檔案名 待執行的命令 如果指定的檔案存在,則執行指定的指令 if existc:\a.bat
type c:\a.bat
 如果c磁碟機存在a.bat檔,則顯示它的內容
if errorlevel 待執行的命令 許多DOS程式在執行結束後,會回傳一個數字,表示執行的結果或狀態,運用if errorlevel 可以判斷程式的回傳值,決定後續執行的指令 if errorlevel 0 
goto success
…(略)
:success
echo 成功
如果系統回傳值為0,則跳至success標籤,顯示「成功」
goto 批次檔執行到goto將跳到指定的標籤 goto end
 …(略)
:end

echo 結束

執行end標籤包含的指令,顯示「結束」
choice 讓用戶輸入一個字元,選擇後續執行的方向。常搭配if errorlevel使用 choice /c:ync Yes, No, or Continue 螢幕將顯示:Yes, No, or Continue [Y,N,C]?
iThome整理,2008年2月