批處理文件

批處理文件

批處理文件是指後綴是bat的文件就是批處理文件,是一種文本文件。簡單的說,它的作用就是自動的連續執行多條命令,批處理文件的內容就是一條一條的命令。

基本信息


1
1
批處理文件是無格式的文本文件。在命令提示下鍵入批處理文件的名稱,或者雙擊該批處理文件,系統就會調用Cmd.exe按照該文件中各個命令出現的順序來逐個運行它們。使用批處理文件(也被稱為批處理程序或腳本),可以簡化日常或重複性任務。批處理的本質,是一堆DOS命令按一定順序排列而形成的集合。批處理,也稱為批處理腳本,英文譯為BATCH,批處理文件後綴BAT就取的前三個字母。它的構成沒有固定格式,只要遵守以下這條就ok了:每一行可視為一個命令,每個命令里可以含多條子命令,從第一行開始執行,直到最後一行結束,它運行的平台是DOS。批處理有一個很鮮明的特點:使用方便、靈活,功能強大,自動化程度高。它有什麼用呢?比如,在啟動wps軟體時,每次都必須執行C:\>cd wpsC:\WPS>spdosC:\WPS>pyC:\WPS>wbxC:\WPS>wps如果每次用WPS之前都這樣執行一次,您是不是覺得很麻煩呢?如果有一個方法,只需編寫一個批處理文件,就會自動執行剛才的所有命令,您想不想學呢?當您看完此節,自己編寫的第一個批處理文件順利執行時,您一定會大吃一驚的。此外電腦每次啟動時都會尋找autoexec.bat這條批處理文件,從而可執行一些每次開機都要執行的命令,如設置路徑path、載入滑鼠驅動mouse、磁碟加速smartdrv等,可以使您的電腦真正自動化。echo、@、call、pause、rem 是批處理文件最常用的幾個命令,我們就從他們開始學起。 echo 表示顯示此命令后的字元echo off 表示在此語句后所有運行的命令都不顯示命令行本身@ 與echo off相象,但它是加在其它命令行的最前面,表示運行時不顯示命令行本身。call 調用另一條批處理文件(如果直接調用別的批處理文件,執行完那條文件后將無法執行當前文件後續命令)pause 運行此句會暫停,顯示Press any key to continue... 等待用戶按任意鍵後繼續rem 表示此命令后的字元為解釋行,不執行,只是給自己今後查找用的例:用edit編輯a.bat文件,輸入下列內容后存檔為c:\a.bat,執行該批處理文件后可實現:將根目錄中所有文件寫入 a.txt中,啟動UCDOS,進入WPS等功能。
文件內容
批處理文件的內容為: 文件表示:echo off 不顯示命令行dir c:\*.* >a.txt 將c盤文件列表寫入a.txtcall c:\ucdos\ucdos.bat 調用ucdosecho 你好 顯示"你好"pause 暫停,等待按鍵繼續rem 使用wps 註釋將使用wpscd ucdos 進入ucdos目錄wps 使用wps批處理文件中還可以像C語言一樣使用參數,這隻需用到一個參數表示符%。%表示參數,參數是指在運行批處理文件時在文件名后加的字元串。變數可以從 %0到%9,%0表示文件名本身,字元串用%1到%9順序表示。例如,C:根目錄下一批處理文件名為f.bat,內容為 format %1則如果執行C:\>f a: 則實際執行的是format a:又如C:根目錄下一批處理文件的名為t.bat,內容為 type %1 type %2那麼運行C:\>t a.txt b.txt 將順序地顯示a.txt和b.txt文件的內容if goto choice for 是批處理文件中比較高級的命令,如果這幾個你用得很熟練,你就是批處理文件的專家啦。if 表示將判斷是否符合規定的條件,從而決定執行不同的命令。有三種格式:1、if "參數" == "字元串" 待執行的命令參數如果等於指定的字元串,則條件成立,運行命令,否則運行下一句。(注意是兩個等號)如if "%1"=="a" format a:2、if exist 文件名 待執行的命令如果有指定的文件,則條件成立,運行命令,否則運行下一句。如if exist config.sysedit config.sys3、if errorlevel 數字 待執行的命令如果返回碼等於指定的數字,則條件成立,運行命令,否則運行下一句。如if errorlevel 2 goto x2 DOS程序運行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼goto 批處理文件運行到這裡將跳到goto 所指定的標號處,一般與if配合使用。如:goto end:endecho this is the end標號用 :字元串 表示,標號所在行不被執行choice 使用此命令可以讓用戶輸入一個字元,從而運行不同的命令。使用時應該加/c:參數,c:后應寫提示可輸入的字元,之間無空格。它的返回碼為1234……如: choice /c:dme defrag,mem,end將顯示defrag,mem,end[D,M,E]?例如,test.bat的內容如下:@echo offchoice /c:dme defrag,mem,endif errorlevel 3 goto defrag 應先判斷數值最高的錯誤碼if errorlevel 2 goto memif errotlevel 1 goto end:defragc:\dos\defraggoto end:memmemgoto end:endecho good bye此文件運行后,將顯示 defrag,mem,end[D,M,E]? 用戶可選擇d m e ,然後if語句將作出判斷,d表示執行標號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,文件結束。for 循環命令,只要條件符合,它將多次執行同一命令。格式FOR [%%f] in (集合) DO [命令]只要參數f在指定的集合內,則條件成立,執行命令如果一條批處理文件中有一行:for %%c in (*.bat *.txt) do type %%c含義是如果是以bat或txt結尾的文件,則顯示文件的內容。autoexec.batDOS在啟動會自動運行autoexec.bat這條文件,一般我們在裡面裝載每次必用的程序,如: path(設置路徑)、smartdrv(磁碟加速)、 mouse(滑鼠啟動)、mscdex(光碟機連接)、 doskey(鍵盤管理)、set(設置環境變數)等。如果啟動盤根目錄中沒有這個文件,電腦會讓用戶輸入日期和時間。例如,一個典型的autoexec.bat內容如下:@echo off 不顯示命令行prompt $p$g 設置提示符前有目錄提示path c:\dos;c:\;c:\windows;c:\ucdos;c:\tools 設置路徑lh c:\dos\doskey.com載入鍵盤管理lh c:\mouse\mouse.com 載入滑鼠管理lh c:\dos\smartdrv.exe 載入磁碟加速管理lh c:\dos\mscdex /S /D:MSCD000 /M:12 /V 載入CD-ROM驅動set temp=c:\temp 設置臨時目錄常用命令
echo 命令打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。語法echo [{on|off}] [message]Sample:@echo off / echo hello world在實際應用中我們會把這條命令和重定向符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些命令到特定的文件中。@命令符@與echo off功能相似,但它是加在其他命令行的最前面,表示運行時不顯示命令行本身。舉例:----------------------------------------------------------------------------------------------------@echo off@echo Now initializing the program,please wait a minite...@format X: /q/u/autoset //format命令不可以使用/y參數,但可以使用autoset這個//參數,效果和y是一樣的----------------------------------------------------------------------------------------------------call命令call命令用於從一個批處理程序調用另一個批處理程序,而不終止父批處理程序。call命令提示接受用作調用目標的標籤。如果再腳本或批處理文件外使用call命令,則其不會在命令行起作用。語法:call [[Drive:][Path] FileName [Bathparameters]] [:labe] [Arguments]]參數: [Drive:][Path] FileName指定要調用的批處理程序的位置和名稱。FileName參數必須有.bat或.cmd擴展名。Batchparameters指定批處理程序所需的任何命令行信息,包括命令行選項、文件名、批處理參數(即從%0到%9)或變數(例如,%baud%)。:Label指定批處理程序要跳轉到的標籤。使用帶有該參數的call命令,可以創建新的批處理文件上下文,並將控制權交給指定標籤后的語句。首先遇到該處理文件的末尾時(在跳轉到標籤后),控制權將交還給call語句后的語句。第二次遇到批處理文件的末尾時,將推出批處理腳本。Arguments對於以:Label開始的批處理程序,指定要傳遞給其新實例的所有命令行信息,包括命令行選項、文件名、批處理參數(即從%1到%9)或變數(例如,%baud%)。舉例:要從其他批處理程序運行checknew.bat程序,請在父批處理程序中輸入以下命令:----------------------------------------------------------------------------------------------------call checknew----------------------------------------------------------------------------------------------------如果父批處理程序接受兩個批處理參數並且希望將這些參數傳遞給checknew.bat,則可以在父批處理程序中使用以下命令:----------------------------------------------------------------------------------------------------call checknew %1 %2----------------------------------------------------------------------------------------------------rem 命令註釋命令,類似於在C語言中的,它並不會被執行,只是起一個註釋的作用,便於別人閱讀和你自己日後修改。:: 也具有rem的功能Rem MessageSample:@Rem Here is the description.pause 命令暫停命令。運行 Pause 命令時,將顯示下面的消息:Press any key to continue. . .(或:請按任意鍵繼續. . .)Sample:@echo off:begincopy G:*.* d:\backecho 請插入另一張光碟...pausegoto begin在這個例子中,驅動器 G 中磁碟上的所有文件均複製到d:\back中。顯示的註釋提示您將另一張光碟盤放入驅動器 G 時,pause 命令會使程序掛起,以便您更換光碟,然後按任意鍵繼續處理。start 命令調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。如:start calc.exe即可打開Windows的計算器。常用參數:MIN 開始時窗口最小化SEPARATE 在分開的空間內開始 16 位 Windows 程序HIGH 在 HIGH 優先順序類別開始應用程序REALTIME 在 REALTIME 優先順序類別開始應用程序WAIT 啟動應用程序並等候它結束parameters 這些為傳送到命令/程序的參數執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示。如果在命令腳本內執行,該新行為則不會發生。goto 命令跳轉命令。程序指針跳轉到指定的標籤,從標籤后的第一條命令開始繼續執行批處理程序。語法:goto label參數:label指定所要轉向的批處理程序中的行。Sample:if {%1}=={} goto noparmsif {%2}=={} goto noparms(如果這裡的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋。)@Rem check parameters if null show usage:noparmsecho Usage: monitor.bat ServerIP PortNumbergoto end標籤的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標籤,goto命令就是根據這個:來尋找下一步跳到到那裡。最好有一些說明這樣你別人看起來才會理解你的意圖啊。set 命令顯示、設置或刪除變數。顯示變數:set 或 set s 前者顯示批處理當前已定義的所有變數及其值,後者顯示所有以s開頭的變數及值。設置變數:set aa=abcd 此句命令便可向變數aa賦值abcd。如果變數aa已被定義,則aa的值被修改為abcd;若aa尚未定義,則此句命令即可定義新的變數aa,同時為變數aa賦予初始值abcd。刪除變數:set aa= 此句命令即可刪除變數aa。若變數aa已被定義,則刪除變數aa;若aa尚未定義,則此句命令沒實質意義。需要說明的是,批處理中的變數是不區分類型的,不需要像C語言中的變數那樣還要區分int、float、char等。比如執行set aa=345后,變數aa的值既可以被視為數字345,也可以被視為字元串345。set命令具有擴展功能,如用作交互輸入、字元串處理、數值計算等,屬於高級命令範疇。
高級命令
if、choice、for等命令是批處理文件中比較高級的命令。
if命令
用語在批處理程序中執行條件處理語法:if [not] errorlevel Number Command [else Expression]if [not] Strting==String2 Command [else Expression]if [not] exist FileName Command [else Expression}如果啟用了命令擴展,可以使用以下語法:if String1 Compare0p String2 command [else Expression]if cmdextversion Nuber Command [else Expression]參數:not指定只有當條件為假時才執行該命令errorlevel Number只有當由cmd.exe運行的前一個程序返回等於或大於Number的退出碼時,才能指定真條件。Command指定只有滿足前面的條件時才執行的命令。String1==String2隻有當String和String2相同時才能指定真條件。這些值可以是文字字元串或批處理變數(例如%1)。對於文字字元串,不需要使用問號。exist FileName如果FileName存在,則指定真條件。Compareop指定3個字母的比較運算符。表1列出了Compareop的有效值。
運算符 描述 運算符 描述 
EQA等於 LEQ 小於或等於 
NEQ不等於GTR大於
LSS小於 GEQ大於或等於
/i
強制字元串比較忽略大小寫。可以在if的String1==String2格上使用/i。這些比較是通用的。因為如果String1和String2全部由數字組成,則字元串將轉化為數字並執行比較。
cmdxtversion Number
只有與cmd.exe的“命令擴展”功能相關的內部版本號等於或大於Number時,才指定真條件。第一版本是1。當命令擴展的功能有重大增強時,則在此號碼上加1。禁用命令擴展時(默認情況下命令擴展為啟用),cmdextversion條件不為真。
defined Variable
如果定義了Variable,則指定條件為真。
Expression
指定將傳遞給else子句中的命令行命令和任何參數。
舉例:
例1:要在找不到文件product.dat時顯示找不到數據文件的消息,則輸入:
if not exist product .dat echo Cannot find data file
例2:如果在格式化驅動器A中的磁碟期間發生錯誤,則以下命令將顯示錯誤消息。
----------------------------------------------------------------------------------------------------
:begin
@echo off
format a:/s
if not errorlevel 1 goto end
echo An error occurred during formatting.
:end
echo End of batch program.
----------------------------------------------------------------------------------------------------
如果沒發生錯誤,不會出現錯誤消息

choice命令

使用choice命令,在批處理程序中,通過顯示提示信息並暫停批處理程序,用戶可以從一組選項鍵中進行選擇。
語法:
choice [/c [Choices]] [/n] [/cs] [/t Timeout /d Choice] [/m Text]
參數:
/c Choices
指定用戶選項鍵。顯示時,選項鍵由逗號分隔,出現在中括弧([])中,後面跟著問號。如果未指定“/c Choices ”,默認情況下,Choice顯示使用[Y,N]。
/n
隱藏用戶選項鍵。如果使用此命令行選項,將在提示符之前出現消息正文,選項仍處於啟用狀態。
/cs
指定用戶選項鍵必須區分大小寫。默認情況下,用戶選項鍵不區分大小寫。
/t Timeout /d Choice
指定在默認為指定鍵之前choice暫停指定的秒數。表2描述了/t命令行選項的值。
描述
Timeout要暫停的秒數。可接受的值介於0~9 999。如果使用0,choice在默認為指定鍵之前不暫停
/d Choice指定Timeout秒數之後的默認選擇。使用的字元必須在由/c Choice指定的選擇集中。如果使用此命令行選項,還必須同時指定/t Timeout
指定要在提示符之前顯示的文字。如果使用包括命令行選項字元(即“/”)作為提示符之前的一部分文字,必須用引號將該文字引起來。如果未指定任何文字,choice將只顯示提示符。
舉例:
----------------------------------------------------------------------------------------------------
@echo off
choice /C dme /m "defrag,mem,end"
if errorlevel 3 goto end //應先判斷數值最高的錯誤碼
if errorlevel 2 goto mem
if errotlevel 1 goto defrag
:defrag
c:\dos\defrag
goto den
:end
echo good bye
----------------------------------------------------------------------------------------------------
此文件運行后,將顯示:
defrag,men,end[D,M,E]?用戶可選擇d m e
然後if語句將做出判斷,d表示執行標號為defrag的程序段,m表示執行標號為mem的程序段,c表示執行標號為end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,程序結束。

for命令

for命令用於對一組文件中的每個文件運行指定的命令
語法:
for [%Variable | %%Variable ] in (Set) do Command [CommandLineoptions]
參數:
[%Variable | %%Variable ]
必需參數,代表可替換的參數。使用%Variable通過命令提示符執行for命令。使用%%Variable在批處理文件中執行for命令。變數要區分大小寫,並且必須用Alpha值表示,例如%A、%B或%C。
(set)
必需參數,指定要用指定命令處理的一個或多個文件、目錄、數值範圍以及文本字元串。需要括弧。
Command
必需參數,指定要對包括在指定的(Set)中每個文件、目錄、數值範圍以及文本字元串所執行的命令。
CommandLineOptions
指定要與所指定命令一起使用的任何命令行選項。
循環命令只要條件符合,它將多次執行同一命令,同時for的循環裡面還可以套用for再進行循環。
舉例:
for %%c in (*.bat*.txt)
do type %%c
含義:如果以.bat或.txt結尾的文件,則顯示文件的內容。