批處理命令解釋_第1頁(yè)
批處理命令解釋_第2頁(yè)
批處理命令解釋_第3頁(yè)
批處理命令解釋_第4頁(yè)
批處理命令解釋_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1符號(hào)簡(jiǎn)介echo 命令打開回顯或關(guān)閉請(qǐng)求回顯功能,或顯示消息。如果沒有任何參數(shù),echo命令將顯示當(dāng)前回顯設(shè)置。語(yǔ)法echo on|off messageSample:echo off / echo hello world在實(shí)際應(yīng)用中我們會(huì)把這條命令和重定向符號(hào)(也稱為管道符號(hào),一般用> >> )結(jié)合來實(shí)現(xiàn)輸入一些命令到特定的文件中。rem 命令注釋命令,類似于在C語(yǔ)言中的/*-*/,它并不會(huì)被執(zhí)行,只是起一個(gè)注釋的作用,只有在編輯批處理時(shí)才會(huì)被看到,主要用于方便修改。: 也具有rem的功能但:和rem還是有區(qū)別的,當(dāng)關(guān)閉回顯時(shí),rem和:后的內(nèi)容都不會(huì)顯示。順序批處理但是

2、當(dāng)打開回顯時(shí),rem后的內(nèi)容會(huì)顯示出來,然而:后的內(nèi)容仍然不會(huì)顯示。Rem 注釋內(nèi)容示例:Rem 你好。pause 命令暫停命令。運(yùn)行 Pause 命令時(shí),將顯示下面的消息:Press any key to continue. . .(或:請(qǐng)按任意鍵繼續(xù). . .)示例:echo off:begincopy G:*.* d:backecho 請(qǐng)插入另一張光盤.pausegoto begin在這個(gè)例子中,驅(qū)動(dòng)器 G 中磁盤上的所有文件均復(fù)制到d:back中。顯示的注釋提示您將另一張光盤盤放入驅(qū)動(dòng)器 G 時(shí),pause 命令會(huì)使程序掛起,以便您更換光盤,然后按任意鍵繼續(xù)處理。call 命令從一個(gè)批

3、處理程序調(diào)用另一個(gè)批處理程序,并且不終止父批處理程序。call批處理功能界面命令接受用作調(diào)用目標(biāo)的標(biāo)簽。如果在腳本或批處理文件外使用 Call,它將不會(huì)在命令行起作用。語(yǔ)法call 路徑文件名 標(biāo)簽參數(shù)Drive:Path FileName指定要調(diào)用的批處理程序的位置和名稱。start 命令調(diào)用外部程序,所有的DOS命令和命令行程序都可以由start命令來調(diào)用。如:startcalc.exe即可打開Windows的計(jì)算器。常用參數(shù):MIN 開始時(shí)窗口最小化SEPARATE 在分開的空間內(nèi)開始 16 位 Windows 程序HIGH 在 HIGH 優(yōu)先級(jí)類別開始應(yīng)用程序REALTIME 在 RE

4、ALTIME 優(yōu)先級(jí)類別開始應(yīng)用程序WAIT 啟動(dòng)應(yīng)用程序并等候它結(jié)束parameters 這些為傳送到命令/程序的參數(shù)執(zhí)行的應(yīng)用程序是 32-位 GUI 應(yīng)用程序時(shí),CMD.EXE 不等應(yīng)用程序常見批處理案例終止就返回命令提示。如果在命令腳本內(nèi)執(zhí)行,該新行為則不會(huì)發(fā)生。goto 命令跳轉(zhuǎn)命令。程序指針跳轉(zhuǎn)到指定的標(biāo)簽,從標(biāo)簽后的第一條命令開始繼續(xù)執(zhí)行批處理程序。語(yǔ)法:goto label (label是參數(shù),指定所要轉(zhuǎn)向的批處理程序中的行。)示例::1startgoto 1運(yùn)行以上這段命令,就會(huì)打開很多個(gè)窗口(用來整人相當(dāng)不錯(cuò))。這段命令的意思是,先用start命令打開窗口,再用goto 1

5、命令轉(zhuǎn)到1標(biāo)簽,即第一行后面的命令。注意標(biāo)簽名字前面要加上英文的冒號(hào)。標(biāo)簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個(gè):選擇批處理用來表示這個(gè)字母是標(biāo)簽,goto命令就是根據(jù)這個(gè):來尋找下一步跳到到那里。最好有一些說明這樣別人看起來才會(huì)理解你的意圖啊。set 命令顯示、設(shè)置或刪除變量。顯示變量:set 或 set s 前者顯示批處理當(dāng)前已定義的所有變量及其值,后者顯示所有以s開頭的變量及值。設(shè)置和調(diào)用變量:例如set aa=abcd,就是把a(bǔ)a定義為abcd。如果要調(diào)用這個(gè)變量,就把a(bǔ)a兩邊加上個(gè)百分號(hào)。例如:set aa=abcdecho %aa%pause運(yùn)行這段命令就會(huì)顯示“a

6、bcd”。刪除變量:set aa= 此句命令即可刪除變量aa。若變量aa已被定義,則刪除變量aa;若aa尚未定義,則此句命令無實(shí)質(zhì)意義。需要說明的是,批處理中的變量是不區(qū)分類型的,不需要像C語(yǔ)言中的變量那樣還要區(qū)分int、float、char等。比如執(zhí)行set aa=345后,變量aa的值既可以被視為數(shù)字345,也可以被視為字符串345。set命令具有擴(kuò)展功能,如用作交互輸入、字符串處理、數(shù)值計(jì)算等,屬于高級(jí)命令范疇。2符號(hào)簡(jiǎn)介回顯屏蔽 表示不顯示后面的命令,在入侵過程中(例如使用批處理來格式化敵人批處理過程的硬盤)自然不能讓對(duì)方看到你使用的命令啦。用法舉例:通過運(yùn)行批處理文件對(duì)比pause和

7、pause命令即可明了的效果。重定向1 >;與>>將輸出信息重定向到指定的設(shè)備或文件。系統(tǒng)默認(rèn)輸出到顯示器。如:echo aaaaa>a.txt 即可將本在顯示器上顯示的信息aaaaa輸出到文件a.txt中,屏幕上沒有任何顯示。如果文件a.txt本來已經(jīng)存在,該命令將首先擦除a.txt中的所有信息,然后寫入信息aaaaa;若a.txt本來就不存在,該命令即可新建一個(gè)a.txt文件,并寫入信息aaaaa。echo aaaaa>>a.txt 類似于echo aaaaa>a.txt。區(qū)別在于:如果a.txt本已存在,>a.txt會(huì)擦除a.txt中的原有

8、內(nèi)容,而>>a.txt并不擦除原有內(nèi)容,僅在a.txt文件的末尾添加信息aaaaa。a.txt不存在時(shí),二者沒有差別。重定向2 <將輸入信息來源重定向?yàn)橹付ǖ脑O(shè)備或文件。系統(tǒng)默認(rèn)從顯示器讀取輸入信息。重定向使用舉例:=echo offecho abcdefg這是文件a.txt中的信息>a.txtecho 請(qǐng)任意輸入字符,以回車結(jié)束:set /p ifo=clsecho 【 從屏幕獲得的輸入信息 】echo %ifo%set /p ifo=<a.txtecho 【 從文件a.txt獲得的輸入信息 】echo %ifo%pause>nul=讀者觀察命令與輸出即可

9、體會(huì)到重定向的功能和效果。管道符號(hào) |將管道符號(hào)前面命令的輸出結(jié)果重定向輸出到管道符號(hào)后面的命令中去,作為后面命令的輸入。使用格式為:command_1|command_2管道符號(hào)使用舉例:=echo offecho aaaa>a.txtdel /p a.txtpause=echo offecho aaaa>a.txtecho y|del /p a.txtpause=對(duì)比以上兩個(gè)批處理執(zhí)行結(jié)果,讀者即可明白管道符的用法和效果。需要說明的是,上面del命令添加開關(guān)/p只是為了讓讀者明白管道符號(hào)的使用方法,實(shí)際刪除文件時(shí)不加/p開關(guān)即可實(shí)現(xiàn)無提示直接刪除。轉(zhuǎn)義符 將特殊符號(hào)轉(zhuǎn)化為一般符

10、號(hào),即剝離特殊符號(hào)的特殊地位。特殊符號(hào)指:| & > <比如,如果我們想輸出符號(hào)“>;”,直接用命令 echo > 是不行的,必須修改為 echo >;。其余幾個(gè)特殊符號(hào)類似需要有同樣的處理。轉(zhuǎn)義字符使用舉例:=echo offecho aaaa>a.txtecho 第一句echo執(zhí)行完畢echo aaaa>a.txtecho 第二句echo執(zhí)行完畢pause=比較上面的兩句echo,第一句echo將信息aaaa輸出到了文件a.txt,而第二句echo則在直接屏幕上顯示出aaaa>a.txt邏輯命令符邏輯命令符包括:&;、&

11、;&;、|&-它的作用是用來連接n個(gè)DOS命令,并把這些命令按順序執(zhí)行,而不管是否有命令執(zhí)行失?。?amp;&-當(dāng)&&;前面的命令成功執(zhí)行時(shí),執(zhí)行&&;后面的命令,否則不執(zhí)行;|-當(dāng)|前面的命令失敗時(shí),執(zhí)行|后面的命令,否則不執(zhí)行。=echo offecho |reg add HKCU /v try /f|echo *失敗*reg add HKCU1 /v try /f|echo *成功*echo &&reg delete HKCU /v try /f&&echo *成功*reg delete HKCU /

12、v try /f&&echo *失敗*echo &reg delete HKCU /v try /f&echo *也許成功*reg delete HKCU /v try /f&echo *也許失敗*pause=執(zhí)行reg add或reg delete后,系統(tǒng)會(huì)給出執(zhí)行結(jié)果;我們通過echo命令也給出了“執(zhí)行結(jié)果”。對(duì)比系統(tǒng)和我們自己給出的結(jié)果,既可以驗(yàn)證邏輯命令的判斷機(jī)理。3命令釋義文件夾管理cd 顯示當(dāng)前目錄名或改變當(dāng)前目錄。md 創(chuàng)建目錄。rd 刪除一個(gè)目錄。dir 顯示目錄中的文件和子目錄列表。tree 以圖形顯示驅(qū)動(dòng)器或路徑的文件夾結(jié)構(gòu)。path

13、 為可執(zhí)行文件顯示或設(shè)置一個(gè)搜索路徑。copy 復(fù)制文件和目錄樹。文件管理type 顯示文本文件的內(nèi)容。copy 將一份或多份文件復(fù)制到另一個(gè)位置。del 刪除一個(gè)或數(shù)個(gè)文件。move 移動(dòng)文件并重命名文件和目錄。(Windows XP Home Edition中沒有)ren重命名文件。replace 替換文件。attrib 顯示或更改文件屬性。find 搜索字符串。fc 比較兩個(gè)文件或兩個(gè)文件集并顯示它們之間的不同網(wǎng)絡(luò)命令ping 進(jìn)行網(wǎng)絡(luò)連接測(cè)試、名稱解析ftp文件傳輸net 網(wǎng)絡(luò)命令集及用戶管理telnet遠(yuǎn)程登陸ipconfig顯示、修改TCP/IP設(shè)置msg 給用戶發(fā)送消息arp 顯

14、示、修改局域網(wǎng)的IP地址-物理地址映射列表系統(tǒng)管理at 安排在特定日期和時(shí)間運(yùn)行命令和程序shutdown立即或定時(shí)關(guān)機(jī)或重啟tskill 結(jié)束進(jìn)程taskkill結(jié)束進(jìn)程(比tskill高級(jí),但WinXPHome版中無該命令)tasklist顯示進(jìn)程列表(Windows XP Home Edition中沒有)sc 系統(tǒng)服務(wù)設(shè)置與控制reg 注冊(cè)表控制臺(tái)工具powercfg控制系統(tǒng)上的電源設(shè)置對(duì)于以上列出的所有命令,在cmd中輸入命令+/?即可查看該命令的幫助信息。如find /?4語(yǔ)句結(jié)構(gòu)類似于C語(yǔ)言,批處理也有它的語(yǔ)句結(jié)構(gòu)。批處理的語(yǔ)句結(jié)構(gòu)主要有選擇結(jié)構(gòu)(if語(yǔ)句)、循環(huán)結(jié)構(gòu)(for語(yǔ)句)

15、等。if語(yǔ)句(選擇結(jié)構(gòu))if語(yǔ)句實(shí)現(xiàn)條件判斷,包括字符串比較、存在判斷、定義判斷等。通過條件判斷,if語(yǔ)句即可以實(shí)現(xiàn)選擇功能。1字符串比較if語(yǔ)句僅能夠?qū)蓚€(gè)字符(串)是否相同、先后順序進(jìn)行判斷等。其命令格式為:IF not string1 compare-op string2 command1 else command2其中,比較操作符compare-op有以下幾類:= - 等于EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于選擇開關(guān)/i則不區(qū)分字符串大小寫;選擇not項(xiàng),則對(duì)判斷結(jié)果進(jìn)行邏輯非。字符串比較示例:=echo off

16、set str1=abcd1233set str2=ABCD1234if %str1%=%str2% (echo 字符串相同!) else (echo 字符串不相同!)if /i %str1% LSS %str2% (echo str1<str2) else (echo str1>=str2)1. echo.set /p choice=是否顯示當(dāng)前時(shí)間?(y/n)if /i not %choice% EQU n echo 當(dāng)前時(shí)間是:%date% %time%pause>nul=對(duì)于最后一個(gè)if判斷,當(dāng)我們輸入n或N時(shí)的效果是一樣的,都不會(huì)顯示時(shí)間。如果我們?nèi)∠_關(guān)/i,則輸

17、入N時(shí),依舊會(huì)顯示時(shí)間。另外請(qǐng)注意一下幾個(gè)細(xì)節(jié):1-echo str1<str2和echo str1>=str2;2-echo.。2存在判斷存在判斷的功能是判斷文件或文件夾是否存在。其命令格式為:IF NOT EXIST filename command1 else command2=echo offif exist %0 echo 文件%0是存在的!if not exist %df0 (echo 文件夾%df0不存在?。?else echo 文件夾%df0存在!pause>nul=這里注意幾個(gè)地方:1-存在判斷既可以判斷文件也可以判斷文件夾;2-%0即代表該批處理的全稱(包

18、括驅(qū)動(dòng)器盤符、路徑、文件名和擴(kuò)展類型);3-%df0是對(duì)%0的修正,只保留了其驅(qū)動(dòng)器盤符和路徑,詳情請(qǐng)參考for /?,屬高級(jí)批處理范疇;4-注意if語(yǔ)句的多行書寫,多行書寫要求command1的左括號(hào)必須和if在同一行、else必須和command1的右括號(hào)同行、command2的左括號(hào)必須與else同行、command1和command2都可以有任意多行,即command可以是命令集。3定義判斷定義判斷的功能是判斷變量是否存在,即是否已被定義。其命令格式為:IF not DEFINED variable command1 else command2存在判斷舉例:=echo offset v

19、ar=111if defined var (echo var=%var%) else echo var尚未定義!set var=% %if defined var (echo var=%var%) else echo var尚未定義!pause>nul=對(duì)比可知,"set var="可以取消變量,收回變量所占據(jù)的內(nèi)存空間。4結(jié)果判斷masm %1.asmif errorlevel 1 pause & edit %1.asmlink %1.obj先對(duì)源代碼進(jìn)行匯編,如果失敗則暫停顯示錯(cuò)誤信息,并在按任意鍵后自動(dòng)進(jìn)入編輯界面;否則用link程序連接生成的obj文件

20、,這種用法是先判斷前一個(gè)命令執(zhí)行后的返回碼(也叫錯(cuò)誤碼,DOS程序在運(yùn)行完后都有返回碼),如果和定義的錯(cuò)誤碼符合(這里定義的錯(cuò)誤碼為1),則執(zhí)行相應(yīng)的操作(這里相應(yīng)的操作為pause & edit %1.asm部分)。另外,和其他兩種用法一樣,這種用法也可以表示否定。用否定的形式仍表達(dá)上面三句的意思,代碼變?yōu)椋簃asm %1.asmif not errorlevel 1 link %1.objpause & edit %1.asmfor語(yǔ)句(循環(huán)結(jié)構(gòu))for語(yǔ)句可以實(shí)現(xiàn)類似于C語(yǔ)言里面的循環(huán)結(jié)構(gòu),當(dāng)然for語(yǔ)句的功能要更強(qiáng)大一點(diǎn),通過不同的開關(guān)可以實(shí)現(xiàn)更多的功能。for語(yǔ)句有多

21、個(gè)開關(guān),不同開關(guān)將會(huì)實(shí)現(xiàn)不同的功能。1無開關(guān)無開關(guān)的for語(yǔ)句能夠?qū)υO(shè)定的范圍內(nèi)進(jìn)行循環(huán),是最基本的for循環(huán)語(yǔ)句。其命令格式為:FOR %variable IN (set) DO command其中,%variable是批處理程序里面的書寫格式,在DOS中書寫為%variable,即只有一個(gè)百分號(hào)(%);set就是需要我們?cè)O(shè)定的循環(huán)范圍,類似于C語(yǔ)言里面的循環(huán)變量;do后面的command就是循環(huán)所執(zhí)行的命令,即循環(huán)體。無開關(guān)for語(yǔ)句舉例:=echo offfor %i in (a,"b c",d) do echo %ipause>nul=2開關(guān)/L含開關(guān)/L的f

22、or語(yǔ)句,可以根據(jù)set里面的設(shè)置進(jìn)行循環(huán),從而實(shí)現(xiàn)對(duì)循環(huán)次數(shù)的直接控制。其命令格式為:FOR /L %variable IN (start,step,end) DO command其中,start為開始計(jì)數(shù)的初始值,step為每次遞增的值,end為結(jié)束值。當(dāng)end小于start時(shí),step需要設(shè)置為負(fù)數(shù)。含開關(guān)/L的for語(yǔ)句舉例(創(chuàng)建5個(gè)文件夾):=echo offfor /l %i in (1,2,10) do md %ipause=上例將新建5個(gè)文件夾,文件夾名稱依次為13579??梢园l(fā)現(xiàn),%i的結(jié)束值并非end的值10,而是不大于end的一個(gè)數(shù)。3開關(guān)/F含開關(guān)/F的for語(yǔ)句具有最

23、強(qiáng)大的功能,它能夠?qū)ψ址M(jìn)行操作,也能夠?qū)γ畹姆祷刂颠M(jìn)行操作,還可以訪問硬盤上的ASCII碼文件,比如txt文檔等。其命令格式為:FOR /F "options" %variable IN (set) DO command其中,set為("string"、'command'、file-set)中的一個(gè);options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個(gè)或多個(gè)的組合。各選項(xiàng)的意義參見for /f。一般情況下,使用較多的是skip、tokens、delims三個(gè)選項(xiàng)。

24、含開關(guān)/F的for語(yǔ)句舉例:=echo offecho *No Options:for /f %a in ("1,2,10") do echo a=%aecho *Options tokens & delims:for /f "tokens=1-3 delims=," %a in ("1,2,10") do echo a=%a b=%b c=%cpause=echo offecho 本文件夾里面的文件有:for /f "skip=5 tokens=3* delims= " %a in ('dir&#

25、39;) do (if not "%a"="<DIR>" if not "%b"="字節(jié)" if not "%b"="可用字節(jié)" echo %b)pause=echo offecho 本文件夾里面的文件有:dir>c:file.txtfor /f "skip=5 tokens=3* delims= " %a in (c:file.txt) do (if not "%a"="<DIR>"

26、if not "%b"="字節(jié)" if not "%b"="可用字節(jié)" echo %b)del c:file.txtpause=對(duì)于后面的兩個(gè)例子,其中options里面的delims= 是可以刪除的,因?yàn)橹灰砑恿?F開關(guān)系統(tǒng)就將delims的值默認(rèn)為空格。符號(hào)字符串中的最后一個(gè)字符星號(hào),那么額外的變量將在最后一個(gè)符號(hào)解析之后分配并接受行的保留文本。本例中也可以改為4,不過文件名中有空格的文件,只能顯示空格以前部分同時(shí)我們也看到了,for語(yǔ)句的do后面的command也是可以分行的,只需要保證command的左括

27、號(hào)和do在同一行就可以了。4開關(guān)/D或/R含開關(guān)/D或/R的for語(yǔ)句是與目錄或文件有關(guān)的命令,一般情況下很少使用。含開關(guān)/R的命令有時(shí)候被用于通過遍歷文件夾來查找某一個(gè)文件或文件夾,故而列舉此例。含開關(guān)/R的for語(yǔ)句舉例(文件夾遍歷):=echo offsetlocal enabledelayedexpansionFOR /R d: %i IN (.) DO (set dd=%iset "dd=!dd:0,-1!"echo !dd!)pauseexit=上例即可以羅列出D盤下的所有文件夾,其速度要比命令"tree d:"慢多了,不過其返回結(jié)果的實(shí)用性

28、則遠(yuǎn)遠(yuǎn)超過了tree命令。一般情況下我們不推薦通過遍歷文件夾來查找文件,特別是在查找某些程序(比如QQ.exe)的位置時(shí)。推薦通過reg命令查找注冊(cè)表來查找QQ的路徑,以保證查找效率。上例中也出現(xiàn)了幾個(gè)新面孔,如setlocal、感嘆號(hào)等。其中,感嘆號(hào)其實(shí)就是變量百分號(hào)(%)的強(qiáng)化版。之所以要用!而不用%,是因?yàn)樵趂or循環(huán)中,當(dāng)一個(gè)變量被多次賦值時(shí),%dd%所獲取的僅僅是dd第一次被賦予的值;要想刷新dd的值,就必須首先通過命令"setlocal enabledelayedexpansion"來開啟延遲變量開關(guān),然后用!dd!來獲取dd的值。for語(yǔ)句是批處理里面功能最強(qiáng)

29、大、使用最普遍卻又最難掌握的一套命令,這也是批處理菜鳥和批處理高手最明顯的一個(gè)分水嶺,一旦掌握了這套命令,那么你就離批處理達(dá)人不遠(yuǎn)了!5字符串批處理有著具有非常強(qiáng)大的字符串處理能力,其功能絕不低于C語(yǔ)言里面的字符串函數(shù)集。批處理中可實(shí)現(xiàn)的字符串處理功能有:截取字符串內(nèi)容、替換字符串特定字段、合并字符串、擴(kuò)充字符串等功能。下面對(duì)這些功能一一進(jìn)行講解。截取字符串截取字符串可以說是字符串處理功能中最常用的一個(gè)子功能了,能夠?qū)崿F(xiàn)截取字符串中的特定位置的一個(gè)或多個(gè)字符。舉例說明其基本功能:=echo offset ifo=abcdefghijklmnopqrstuvwxyz0 12 3456789ech

30、o 原字符串(第二行為各字符的序號(hào)):echo %ifo%echo 1234567890123 45678901234567890123456echo 截取前5個(gè)字符:echo %ifo:0,5%echo 截取最后5個(gè)字符:echo %ifo:-5%echo 截取第一個(gè)到倒數(shù)第6個(gè)字符:echo %ifo:0,-5%echo 從第4個(gè)字符開始,截取5個(gè)字符:echo %ifo:3,5%echo 從倒數(shù)第14個(gè)字符開始,截取5個(gè)字符:echo %ifo:-14,5%pause=當(dāng)然,上面的例子只是將字符串處理的基本功能展示出來了,還看不出字符串處理具體有什么用處。下面這個(gè)例子是對(duì)時(shí)間進(jìn)行處理。=

31、echo offecho 當(dāng)前時(shí)間是:%time% 即 %time:0,2%點(diǎn)%time:3,2%分%time:6,2%秒%time:9,2%厘秒pause=替換字符串替換字符串,即將某一字符串中的特定字符或字符串替換為給定的字符串。舉例說明其功能:=echo offset aa=偉大的中國(guó)!我為你自豪!echo 替換前:%aa%echo 替換后:%aa:中國(guó)=中華人民共和國(guó)%echo aa = %aa%set "aa=%aa:中國(guó)=中華人民共和國(guó)%"echo aa = %aa%pause=對(duì)于上面的例子有一點(diǎn)說明,對(duì)比兩個(gè)echo aa = %aa%可以發(fā)現(xiàn),如果要修改變

32、量aa的內(nèi)容的話,就需要將修改結(jié)果“%aa:中國(guó)=中華人民共和國(guó)%”賦值給變量aa。上面的字符串截取也有著同樣的特點(diǎn)。字符串合并其實(shí),合并字符串就是將兩個(gè)字符串放在一起就可以了。舉例說明:=echo offset aa=偉大的中國(guó)!set bb=我為你自豪!echo %aa%bb%echo aa=%aa%echo bb=%bb%set "aa=%aa%bb%"echo aa=%aa%pause=同樣,如果要改變變量aa的內(nèi)容的話,就需要將合并結(jié)果“%aa%bb%”賦值給變量aa。擴(kuò)充字符串“擴(kuò)充”這個(gè)詞匯來自于微軟自己的翻譯,意思就是對(duì)表示文件路徑的字符串進(jìn)行特殊的處理,具

33、體功能羅列如下:=I - 刪除任何引號(hào)("),擴(kuò)充 %I%fI - 將 %I 擴(kuò)充到一個(gè)完全合格的路徑名%dI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)%pI - 僅將 %I 擴(kuò)充到一個(gè)路徑%nI - 僅將 %I 擴(kuò)充到一個(gè)文件名%xI - 僅將 %I 擴(kuò)充到一個(gè)文件擴(kuò)展名%sI - 擴(kuò)充的路徑只含有短名%aI - 將 %I 擴(kuò)充到文件的文件屬性%tI - 將 %I 擴(kuò)充到文件的日期/時(shí)間%zI - 將 %I 擴(kuò)充到文件的大小%$PATH:I - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充到找到的第一個(gè)完全合格的名稱。如果環(huán)境變量名未被定義,或者沒有找到文件,此組合鍵會(huì)擴(kuò)充到空字符串可以

34、組合修飾符來得到多重結(jié)果:%dpI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)和路徑%nxI - 僅將 %I 擴(kuò)充到一個(gè)文件名和擴(kuò)展名%fsI - 僅將 %I 擴(kuò)充到一個(gè)帶有短名的完整路徑名%dp$PATH:i - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充到找到的第一個(gè)驅(qū)動(dòng)器號(hào)和路徑。%ftzaI - 將 %I 擴(kuò)充到類似輸出線路的 DIR=以上內(nèi)容引用于for /?幫助信息。其中的I代表變量I,不過需要說明的是,不是所有的變量都能夠進(jìn)行擴(kuò)充的,有兩個(gè)條件:1該字符串代表一個(gè)文件路徑;2變量要用%x來表示,x可取a-z A-Z 0-9共62個(gè)字符中的任意一個(gè)。舉例說明:=echo offecho

35、正在運(yùn)行的這個(gè)批處理:echo 完全路徑:%0echo 去掉引號(hào):%0echo 所在分區(qū):%d0echo 所處路徑:%p0echo 文件名:%n0echo 擴(kuò)展名:%x0echo文件屬性:%a0echo 修改時(shí)間:%t0echo 文件大小:%z0pause=其中的%0是批處理里面的參數(shù),代表當(dāng)前運(yùn)行的批處理的完全路徑。類似的還有%1-%9,分別代表傳遞來的第1-9個(gè)參數(shù)。例子如下:=echo offset aa=C:WindowsPPPa.btxcall :deal aaa %aa% "c c" ddd eeepause>nulexit:dealecho %0 = %

36、0echo %1 = %1echo %2 = %2echo %3 = %3echo %4 = %4echo %5 = %5=其中,變量aa在之前是不可以擴(kuò)充的,通過call命令并將aa作為參數(shù)傳遞給子函數(shù):deal,將aa變量轉(zhuǎn)換成了變量%1,即符合%x格式,從而可以進(jìn)行字符串?dāng)U充。至于%x中x取a-z A-Z的形式,可以復(fù)習(xí)一下for語(yǔ)句,for語(yǔ)句里面的變量就是用%x來表示的,因而可以直接進(jìn)行擴(kuò)充。6數(shù)值計(jì)算批處理里面的數(shù)值計(jì)算功能較弱,只能夠進(jìn)行整型計(jì)算,忽略浮點(diǎn)數(shù)的小數(shù)部分;同時(shí)數(shù)值計(jì)算的范圍也受限于系統(tǒng)位數(shù),對(duì)于目前較為常見的32位機(jī)來說,數(shù)值計(jì)算能處理的數(shù)值范圍為0x8000000

37、0h0x7FFFFFFFh,即-2147483648+2147483647。數(shù)值計(jì)算需要使用set命令,具體格式為“set /a expression”。其中,expression代表計(jì)算表達(dá)式,計(jì)算表達(dá)式跟C語(yǔ)言里面的表達(dá)式基本上完全一致。set支持的運(yùn)算符也跟C語(yǔ)言里面的一樣,只是沒有了増一減一。set支持的運(yùn)算符及優(yōu)先級(jí)排序如下:=() - 分組! - -一元運(yùn)算符(邏輯非、按位非、取負(fù))* / % - 算數(shù)運(yùn)算符(乘、除得商、除得余數(shù),即取余)+ - - 算數(shù)運(yùn)算符(加、減)<< >> - 邏輯移位(左移一位、右移一位)& - 按位“與” - 按位“異”

38、| - 按位“或”= *= /= %= += -= - 賦值&= = |= <<= >>=,-表達(dá)式分隔符(set可一次處理多個(gè)表達(dá)式)=我們知道,批處理中取變量的值是需要用%或者!的,而在set /a 中,直接用變量名稱即可取得變量的值。另外,set支持八進(jìn)制(數(shù)字前綴0)、十進(jìn)制(數(shù)字無前綴)和十六進(jìn)制(數(shù)字前綴0x),且支持不同進(jìn)制之間的計(jì)算,如set /a a=123+0123+0x123,計(jì)算及顯示結(jié)果為十進(jìn)制。7批處理學(xué)習(xí)有關(guān)批處理的一些比較瑣碎、但又比較有價(jià)值的一些知識(shí),運(yùn)用這些知識(shí)后,才有條件更好的實(shí)現(xiàn)的批處理的功能,并能使批處理擺脫黑白世界而顯

39、得更加多姿多彩。一環(huán)境變量所謂“環(huán)境變量”,實(shí)際上就是C語(yǔ)言里面的“變量”的意思。批處理的變量可以分為兩類,由系統(tǒng)定義的系統(tǒng)變量和由用戶根據(jù)需要自定義的用戶變量?!?1系統(tǒng)變量】批處理的一些變量是由操作系統(tǒng)事先定義好的,可以適用于任何批處理,我們稱這些特殊的變量為“系統(tǒng)變量”。系統(tǒng)變量有很多個(gè),包括硬件類、操作系統(tǒng)類、文件路徑類、系統(tǒng)時(shí)間類等。要查看所有的系統(tǒng)變量,請(qǐng)新打開一個(gè)cmd窗口,輸入set回車即可。對(duì)幾個(gè)比較常用的變量解釋如下:ComputerName 計(jì)算機(jī)名,即右鍵我的電腦-屬性-計(jì)算機(jī)名 選項(xiàng)卡中的“完整的計(jì)算機(jī)名稱”1. ComSpeccmd.exe完整路徑名HomeDriv

40、e系統(tǒng)分區(qū)盤符,一般都是C盤,故而HomeDrive=C:Path可執(zhí)行文件默認(rèn)搜索路徑。這個(gè)東東非常重要!待會(huì)兒?jiǎn)为?dú)講解ProgramFiles 就是系統(tǒng)的Program Files的路徑啦,一般都是C:Program Files,這就是安裝軟件時(shí)默認(rèn)的安裝路徑了Prompt 個(gè)性化設(shè)置cmd提示符的必備武器!不過,我沒怎么用過SystemDrive 包含系統(tǒng)根目錄的分區(qū),其實(shí)就是HomeDrive了SystemRoot 系統(tǒng)根目錄路徑,一般都是C:WINDOWSTemp、Tmp 文件、程序等可使用的臨時(shí)目錄,默認(rèn)是C:WINDOWSTemp或Tmp。幾乎所有的程序在運(yùn)行時(shí)都會(huì)在這個(gè)目錄里面

41、“臨時(shí)”寫入文件。一般情況下,程序?qū)懭氲呐R時(shí)文件都應(yīng)該被該程序刪除,可惜的是,大部分的程序都很健忘,導(dǎo)致這個(gè)文件夾占據(jù)的空間越來越大,自然也就使我們的系統(tǒng)增肥嘍。所以,我們要把它修改到其他分區(qū),并且時(shí)時(shí)的清理里面的臨時(shí)文件。UserName 當(dāng)前用戶名,即所登陸的賬戶名UserProfile 當(dāng)前用戶的配置目錄,一般都是C:Documents and Settings%UserName%。默認(rèn)情況下,我們的桌面就是這個(gè)目錄下面的“桌面”文件夾;我的文檔就是這個(gè)目錄下面的“My Documents”文件夾。所以啦,往桌面上或我的文檔里面放東西就是放到這個(gè)文件夾下面了,也就是放到C盤了,重裝系統(tǒng)時(shí)

42、要覆蓋C盤內(nèi)容的,所以桌面上或我的文檔里面的東西當(dāng)然就會(huì)Gone with the Wind了解決方法有兩個(gè),一是保持良好的習(xí)慣,不把重要文件放到這兩個(gè)地方;二是,修改默認(rèn)設(shè)置,將這兩個(gè)文件夾都移到其他分區(qū)。WinDir操作系統(tǒng)路徑,其實(shí)就是SystemRoot了二用戶變量編寫批處理程序時(shí),用戶根據(jù)需要自己定義的變量稱之為用戶變量。用戶變量類似于C語(yǔ)言里面的變量,僅僅在定義該變量的程序中有效。用戶變量由set命令定義,這是批處理中非常非常重要的一個(gè)操作,從而使set命令成為批處理里面使用頻率最高的幾個(gè)命令之一。關(guān)于set命令的使用,參考set /?,本教程也會(huì)在后面對(duì)其進(jìn)行講解?!?3變量引用

43、 】前面的幾節(jié)課里面,我們已經(jīng)看到了如何引用變量,即直接用變量名操作變量,通過"%"或"!"來獲取變量的值。其中,只有在for語(yǔ)句里面重復(fù)對(duì)同一變量多次賦值時(shí)才需要使用"!",并且在使用"!"調(diào)用變量時(shí),要首先“啟用延遲環(huán)境變量擴(kuò)充”,啟動(dòng)命令為:SetLocal EnableDelayedExpansion。另外需要說明的是,“啟用延遲環(huán)境變量擴(kuò)充”后,所有的"!"都將被視為“取變量值”的特殊符號(hào),即使用"!"也不能輸出符號(hào)"!"。若要輸出"!

44、",則需要“停用延遲環(huán)境變量擴(kuò)充”,命令為:SetLocal DisableDelayedExpansion三參數(shù)跟C語(yǔ)言類似,在調(diào)用函數(shù)或其他批處理時(shí)可能需要傳遞參數(shù)。批處理的參數(shù)傳遞分為直接和間接兩種傳遞參數(shù)的方法?!?1直接傳遞 】直接傳遞參數(shù),即在使用call命令時(shí),不使用任何參數(shù),在子函數(shù)或子批處理里面直接對(duì)主函數(shù)(也稱父批處理)里面的變量進(jìn)行修改。這跟匯編語(yǔ)言里面的參數(shù)傳遞方式類似。直接傳遞參數(shù)舉例:=echo offsetlocal enabledelayedexpansionset var=aCdehiM,?mnrstW yecho %var%call :dealse

45、tlocal disabledelayedexpansionset var=%var:?=!%echo %var%pause>nulexit:dealset tm=!var!set var=for %i in (6,3,11,11,16,15,1,4,11,5,12,13,9,0,12,7,15,14,5,10,2,16,18,8) do (set var=!var!tm:%i,1!)goto :eof=可以發(fā)現(xiàn),當(dāng)我們把變量var作為參數(shù)賦予子函數(shù):deal后,子函數(shù)對(duì)var的值進(jìn)行了修改;當(dāng)子函數(shù)返回后,主函數(shù)里面的var的值就已經(jīng)是子函數(shù)里面var被修改后的值了。該例子中,使用了本

46、節(jié)課前面講到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保證了var在for循環(huán)里面能夠根據(jù)我們的意愿進(jìn)行處理,后者保證了能夠正確輸出符號(hào)"!"。另外例子中還使用了命令set,利用set對(duì)字符串進(jìn)行了處理。還有一個(gè)地方使用了語(yǔ)句goto :eof,該語(yǔ)句相當(dāng)于C語(yǔ)言里面的return或匯編語(yǔ)言里面的RET,即子程序返回命令。需要說明的是,當(dāng)子函數(shù)本身就在批處理文件的末尾的話,我們是可以省略這句話的,比如將此例的goto :eof刪除是不會(huì)產(chǎn)生任何影響的?!?2間接傳遞 】間接傳遞參數(shù)

47、,即在使用call命令時(shí),在其后面添加參數(shù),形如call :labelChildBatch Parameter1 Parameter2 . ParameterN。這跟C語(yǔ)言里面?zhèn)鬟f參數(shù)的格式類似。不同于C語(yǔ)言,批處理中的子函數(shù)不需要定義形參,更不需要指定參數(shù)的個(gè)數(shù)。傳遞過來的參數(shù),在子函數(shù)或子批處理里面是以%1%9的形式表示的,即%1%9分別表示傳遞過來的第19個(gè)參數(shù)。=echo offcall :deal aaa bbb "c c" ddd eeepause>nulexit:dealecho %0 = %0echo %1 = %1echo %2 = %2echo %

48、3 = %3echo %4 = %4echo %5 = %5=通過這個(gè)例子就可以清晰的看到%n參數(shù)表示法的用法。參數(shù)列表中包含空格的依舊要用雙引號(hào)(")引起來;另外,也可以看到,%0已經(jīng)變成了子函數(shù)的標(biāo)號(hào)了,而不是父批處理的文件名全稱?!?3區(qū)別 】這兩種參數(shù)傳遞方法本質(zhì)上是沒有區(qū)別的,形式上,直接傳遞直接對(duì)原變量進(jìn)行操作,丟失了原變量的值;間接傳遞則通過%n對(duì)原變量進(jìn)行了簡(jiǎn)單的備份,并且通用性更強(qiáng),即不限定原變量的名稱。另外,使用%n還有一個(gè)非常大的好處,就是可以通過%*i來加強(qiáng)處理變量的能力。關(guān)于%*i,詳細(xì)內(nèi)容參見for /?。針對(duì)二者的差別,可以根據(jù)情況決定使用哪種傳遞方式:

49、-1作為參數(shù)的變量名固定、且在子函數(shù)中不需要對(duì)其進(jìn)行備份的情況下,使用直接傳遞法;-2若將子函數(shù)作為一個(gè)通用的程序模塊,以適應(yīng)于對(duì)不同變量的處理,或者作為參數(shù)的變量不需要備份時(shí),使用間接傳遞法。具體使用哪種方法,還需根據(jù)實(shí)際情況或使用習(xí)慣進(jìn)行選擇。四返回值有些命令在執(zhí)行之后將會(huì)返回一定的錯(cuò)誤值(errorlevel),可以通過errorlevel的值判斷命令執(zhí)行的狀況。這點(diǎn)類似于C語(yǔ)言里面的exit(num),num就是錯(cuò)誤代碼。獲取返回值errorlevel的方法就是,在執(zhí)行命令后,立馬調(diào)用返回值errorlevel,如echo %errorlevel%或者if %errorlevel%=1

50、等命令。errorlevel舉例:=echo offreg add HKCU /v try /f>nulreg delete HKCU /v try /fif errorlevel 0 (echo刪除成功!) else (echo 刪除失?。。﹔eg delete HKCU /v try /fif %errorlevel%=0 (echo 刪除成功?。?else (echo 刪除失?。。﹑ause>nul=上面例子中,由于第一成功的刪除了注冊(cè)表,導(dǎo)致第二次因?yàn)檎也坏阶?cè)表而宣告失敗。同時(shí)我們也看到了errorlevel的使用方法,即if errorlevel 0和if %errorlevel%=0是一樣的。也許你注意到了,里面還有個(gè)笑臉呢O(_)O哈哈這就是ASCII碼啦,后面跟你講啊一般情況下,程序或命令成功執(zhí)行時(shí),返回的errorlevel是0,錯(cuò)誤時(shí)返回1或更高的值。當(dāng)然

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論