自從操作系統(tǒng)誕生以來,批處理就是最重要的功能之一,但在Windows大行其道的今天,批處理這個(gè)概念對普通用戶而言已經(jīng)越來越遠(yuǎn),但不可否認(rèn),作為開發(fā)人員,這是必須要掌握的技能之一。在Linux系統(tǒng)下,批處理通過shell腳本完成,而在windows平臺下,批處理的文件后綴為.bat。bat文件其實(shí)就是dos命令的集合,但許多dos命令都被廢棄了,今天就來講解一下bat文件中使用的那些命令與bat文件的基本寫法。 基礎(chǔ)命令 echo 這是最基礎(chǔ)的顯示命令,將其后的內(nèi)容顯示在命令行,后面一般可以跟字符串、變量等,基本和Linux中的echo命令相同:echo "Hello,My First Bat."1 在實(shí)際應(yīng)用中我們會把這條命令和重定向符號(也稱為管道符號,一般用> >> ^)結(jié)合來實(shí)現(xiàn)輸入一些命令到特定格式的文件中。而在bat文件頭,一般使用echo off語句表示后面的命令行不再顯示。該語句一般和@聯(lián)合使用,@用于命令之前,表示當(dāng)前命令行不顯示,但僅僅適用于當(dāng)前行。所以,一般我們所見的bat文件第一行如下:@echo off1 call 顧名思義,本命令用于調(diào)用外部bat文件,用法位call+【文件名】。如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令。call a.txt1 rem 注釋,有些類似于C語言中的//,后面的內(nèi)容不會執(zhí)行,只是用于閱讀源碼時(shí)參考。 cd chdir的簡寫,相信使用過命令行的人都不會陌生,用于切換路徑。有一些特殊的符號需要掌握一下,以下是基本用法:rem 假設(shè)當(dāng)前目錄為根目錄C盤,其中有my、your兩個(gè)文件夾,F(xiàn)盤有his文件夾 rem 進(jìn)入my文件夾 cd my rem /表示根目錄,從my進(jìn)入your cd /your rem 返回上次目錄 cd - rem 返回上級目錄 cd .. rem 返回根目錄 cd . rem 或者cd / rem 切換到F盤中的his,記住\d 不能省略 cd \d D:/his12345678910111213 pause 顧名思義,該目錄暫停程序執(zhí)行,運(yùn)行此句會暫停批處理的執(zhí)行并在屏幕上顯示Press any key to continue…的提示,等待用戶按任意鍵后繼續(xù)。 start 調(diào)用外部程序,所有的DOS命令和命令行程序都可以由start命令來調(diào)用。 常用參數(shù): MIN 開始時(shí)窗口最小化 SEPARATE 在分開的空間內(nèi)開始 16 位 Windows 程序 HIGH 在 HIGH 優(yōu)先級類別開始應(yīng)用程序 REALTIME 在 REALTIME 優(yōu)先級類別開始應(yīng)用程序 WAIT 啟動應(yīng)用程序并等候它結(jié)束 parameters 這些為傳送到命令/程序的參數(shù) 執(zhí)行的應(yīng)用程序是32位GUI應(yīng)用程序時(shí),CMD.EXE不等應(yīng)用程序終止就返回命令提示。如果在命令腳本內(nèi)執(zhí)行,該新行為則不會發(fā)生。 choice choice 使用此命令可以讓用戶輸入一個(gè)字符(用于選擇),從而根據(jù)用戶的選擇返回不同的errorlevel,然后于if errorlevel配合,根據(jù)用戶的選擇運(yùn)行不同的命令。 注意:choice命令為DOS或者Windows系統(tǒng)提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。 choice參數(shù)列表如下: 參數(shù)列表: /C choices 指定要創(chuàng)建的選項(xiàng)列表。默認(rèn)列表是 “YN”。 /N 在提示符中隱藏選項(xiàng)列表。提示前面的消息得到顯示,選項(xiàng)依舊處于啟用狀態(tài)。 /CS 允許選擇分大小寫的選項(xiàng)。在默認(rèn)情況下,這個(gè)工具是不分大小寫的。 /T timeout做出默認(rèn)選擇之前,暫停的秒數(shù)可接受的值是從0到9999。如果指定了0,就不會有暫停,默認(rèn)選項(xiàng)會得到選擇。 /D choice 在 nnnn 秒之后指定默認(rèn)選項(xiàng)。字符必須在用 /C選項(xiàng)指定的一組選擇中;同時(shí),必須用/T指定 nnnn。 /M text 指定提示之前要顯示的消息。如果沒有指定,工具只顯示提示。 /? 顯示幫助消息。choice /C YNC /M "確認(rèn)請按Y,否請按N,或者取消請按C。" choice /T 10 /C ync /CS /D y choice /C ab /M "選項(xiàng)1請選擇a,選項(xiàng)2請選擇 b。" choice /C ab /N /M "選項(xiàng)1請選擇a,選項(xiàng)2請選擇b。1234 goto 指定跳轉(zhuǎn)到標(biāo)簽,找到標(biāo)簽后,程序?qū)⑻幚韽南乱恍虚_始的命令。goto命令因?yàn)樗囊恍┨匦栽诓簧俑呒壵Z言中變得臭名昭著,但在腳本語言中還是很有必要的。if {%1}=={} goto noparms if {%2}=={} goto noparms(如果這里的if、%1、%2你不明白的話,先跳過去,后面會有詳細(xì)的解釋。) :noparms echo Usage: monitor.bat ServerIP PortNumber goto end12345 if if 表示將判斷是否符合規(guī)定的條件,從而決定執(zhí)行不同的命令。有三種格式: 1. if “參數(shù)” == “字符串” 待執(zhí)行的命令 參數(shù)如果等于指定的字符串,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。(注意是兩個(gè)等號)if "%1"=="a" format a: if {%1}=={} goto noparms if {%2}=={} goto noparms 123 if exist 文件名 待執(zhí)行的命令 如果有指定的文件,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。if exist config.sys edit config.sys 1 if errorlevel / if not errorlevel 數(shù)字 待執(zhí)行的命令 如果返回碼等于指定的數(shù)字,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。if errorlevel 2 goto x2 1 程序運(yùn)行時(shí)都會返回一個(gè)數(shù)字,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。 for for命令是一個(gè)比較復(fù)雜的命令,主要用于參數(shù)在指定的范圍內(nèi)循環(huán)執(zhí)行命令。在批處理文件中使用for命令時(shí),指定變量請使用 %%variable。其實(shí)也就和高級程序語言中的for大同小異,其語法如下: for %variable IN (set) DO command [command-parameters] %variable 指定一個(gè)單一字母可替換的參數(shù)。 (set) 指定一個(gè)或一組文件??梢允褂猛ㄅ浞?。 command 指定對每個(gè)文件執(zhí)行的命令。 command-parameters 為特定命令指定參數(shù)或命令行開關(guān)。 好了,基本上常用的命令也就這么多了,dos命令其實(shí)還很多,如set、|、shift等等,總之,要想寫好bat文件,命令的熟悉是必不可少的。 在bat中使用變量 任何語言中變量都是必不可少的,bat文件中當(dāng)然也是如此。說完了基礎(chǔ)命令,接下來就讓我們說說如何在bat文件中使用變量吧。 %[1-9]表示參數(shù),參數(shù)是指在運(yùn)行批處理文件時(shí)在文件名后加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數(shù)字符串用%1到%9順序表示。 如果現(xiàn)在有一批處理文件t.bat在C盤根目錄下,內(nèi)容如下:@echo off type %1 type %2 123 那么在命令行輸入C:/>t a.txt b.txt 運(yùn)行,%1就表示a.txt,%2就表示b.txt,其他參數(shù)順延。 一個(gè)例子說明 當(dāng)然要學(xué)號任何語言,光靠看語法是無濟(jì)于事的,必須要分析源程序,最好是那些使用廣泛的源程序。為了方便講解,我從tomcat7中取出了批處理文件startup.bat并以注釋的方式寫上一些說明,方便大家學(xué)習(xí)。@echo off rem 創(chuàng)建當(dāng)前目錄的環(huán)境變量 set "CURRENT_DIR=%cd%" rem 判斷tomcat安裝目錄的環(huán)境變量是否正確,若正確,轉(zhuǎn)到gotHome if not "%CATALINA_HOME%" == "" goto gotHome rem 若不正確,把當(dāng)前目錄設(shè)置為軟件根目錄 set "CATALINA_HOME=%CURRENT_DIR%" rem 判斷是否存在catalina.bat批處理文件,存在,轉(zhuǎn)到okHome,否則返回上級目錄 if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome rem 返回上級目錄并將軟件根目錄設(shè)為該目錄 cd .. set "CATALINA_HOME=%cd%" rem 打開當(dāng)前目錄 cd "%CURRENT_DIR%" rem gotHome模塊 :gotHome if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome echo The CATALINA_HOME environment variable is not defined correctly echo This environment variable is needed to run this program goto end rem gotHome模塊結(jié)束 rem okHome模塊 :okHome set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" rem Check that target executable exists if exist "%EXECUTABLE%" goto okExec echo Cannot find "%EXECUTABLE%" echo This file is needed to run this program goto end rem okHome模塊結(jié)束 :okExec rem Get remaining unshifted command line arguments and save them in the set CMD_LINE_ARGS= :setArgs rem 判斷命令行參數(shù)是否存在 if ""%1""=="""" goto doneSetArgs set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 shift goto setArgs :doneSetArgs call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
|