資源描述:
《bat批處理文件語法12轉(zhuǎn)載》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、BAT批處理文件語法12轉(zhuǎn)載BAT批處理文件語法(1-2)(轉(zhuǎn)載)2011/06/1210:55遺憾的是,win9x和DOS下均不支持shift的逆操作.只有在nt內(nèi)核命令行環(huán)境下,shift才支持/n參數(shù),可以以第一參數(shù)為基準返復(fù)移動起始指針.特殊命令ifgotochoicefor是批處理文件中比較高級的命令,如果這幾個你用得很熟練,你就是批處理文件的專家啦。一、if是條件語句,用來判斷是否符合規(guī)定的條件,從而決定執(zhí)行不同的命令。有三種格式:1、if[not]"參數(shù)"=="字符串"待執(zhí)行的命令參數(shù)如果等于(not表示不等,下同)指定的字符串,則條件成立,運行命令,否則運行下一句
2、。例:if"%1"=="a"formata:==if的命令行幫助中關(guān)于此點的描述為:IF[NOT]string1==string2command在此有以下幾點需要注意:1.包含字符串的雙引號不是語法所必須的,而只是習(xí)慣上使用的一種"防空"字符2.string1未必是參數(shù),它也可以是環(huán)境變量,循環(huán)變量以及其他字符串常量或變量3.command不是語法所必須的,string2后跟一個空格就可以構(gòu)成一個有效的命令行==2、if[not]exist[路徑]文件名待執(zhí)行的命令如果有指定的文件,則條件成立,運行命令,否則運行下一句。如:ifexistc:config.systypec:
3、config.sys表示如果存在c:config.sys文件,則顯示它的內(nèi)容。*注*也可以使用以下的用法:ifexistcommanddevice是指DOS系統(tǒng)中已加載的設(shè)備,在win98下通常有:AUX,PRN,CON,NULCOM1,COM2,COM3,COM4LPT1,LPT2,LPT3,LPT4XMSXXXX0,EMMXXXX0A:B:C:.,CLOCK$,CONFIG$,DblBuff$,IFS$HLP$具體的內(nèi)容會因硬軟件環(huán)境的不同而略有差異,使用這些設(shè)備名稱時,需要保證以下三點:1.該設(shè)備確實存在(由軟件虛擬的設(shè)備除外)2.該設(shè)備驅(qū)動程序已加載(aux,prn等標
4、準設(shè)備由系統(tǒng)缺省定義)3.該設(shè)備已準備好(主要是指a:b:.,com1.,lpt1.等)可通過命令mem/d
5、find"device"/i來檢閱你的系統(tǒng)中所加載的設(shè)備另外,在DOS系統(tǒng)中,設(shè)備也被認為是一種特殊的文件,而文件也可以稱作字符設(shè)備;因為設(shè)備(device)與文件都是使用句柄(handle)來管理的,句柄就是名字,類似于文件名,只不過句柄不是應(yīng)用于磁盤管理,而是應(yīng)用于內(nèi)存管理而已,所謂設(shè)備加載也即指在內(nèi)存中為其分配可引用的句柄.==3、iferrorlevel數(shù)字待執(zhí)行的命令很多DOS程序在運行結(jié)束后會返回一個數(shù)字值用來表示程序運行的結(jié)果(或者狀態(tài)),通過iferror
6、level命令可以判斷程序的返回值,根據(jù)不同的返回值來決定執(zhí)行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等于指定的數(shù)字,則條件成立,運行命令,否則運行下一句。如iferrorlevel2gotox2==注===返回值從大到小的順序排列不是必須的,而只是執(zhí)行命令為goto時的習(xí)慣用法,當使用set作為執(zhí)行命令時,通常會從小到大順序排列,比如需將返回碼置入環(huán)境變量,就需使用以下的順序形式:iferrorlevel1setel=1iferrorlevel2setel=2iferrorlevel3setel=3iferrorlevel4setel=4iferrorleve
7、l5setel=5當然,也可以使用以下循環(huán)來替代,原理是一致的:for%%ein(12345678.)doiferrorlevel%%esetel=%%e更高效簡潔的用法,可以參考我寫的另一篇關(guān)于獲取errorlevel的文章出現(xiàn)此種現(xiàn)象的原因是,iferrorlevel比較返回碼的判斷條件并非等于,而是大于等于.由于goto的跳轉(zhuǎn)特性,由小到大排序會導(dǎo)致在較小的返回碼處就跳出;而由于set命令的"重復(fù)"賦值特性,由大到小排序會導(dǎo)致較小的返回碼"覆蓋"較大的返回碼.另外,雖然iferrorlevel=數(shù)字command也是有效的命令行,但也只是command.com解釋命令行時將
8、=作為命令行切分符而忽略掉罷了===二、goto批處理文件運行到這里將跳到goto所指定的標號(標號即label,標號用:后跟標準字符串來定義)處,goto語句一般與if配合使用,根據(jù)不同的條件來執(zhí)行不同的命令組。如:gotoend:endechothisistheend標號用":字符串"來定義,標號所在行不被執(zhí)行。==編注label常被譯為"標簽",但是這并不具有廣泛的約定性.goto與:聯(lián)用可實現(xiàn)執(zhí)行中途的跳轉(zhuǎn),再結(jié)合if可實現(xiàn)執(zhí)行過程的條件分支,多個if即可實現(xiàn)命令的分組,