版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、DOS批處理釋義(轉(zhuǎn)自百度)批處理是一種簡(jiǎn)化的腳本語言,也稱作宏。它應(yīng)用于DOS和Windows系統(tǒng)中,它是由DOS或者Windows系統(tǒng)內(nèi)嵌的命令解釋器(通常是COMMAND.COM或者CMD.EXE)解批處理文件圖標(biāo)釋運(yùn)行。類似于Unix中的Shell腳本。批處理文件具有.bat或者.cmd的擴(kuò)展批處理窗口名,其最簡(jiǎn)單的例子,是逐行書寫在命令行中會(huì)用到的各種命令。更復(fù)雜的情況,需要使用if,for,goto等命令控制程序的運(yùn)行過程,如同C,Basic等中高級(jí)語言一樣。如果需要實(shí)現(xiàn)更復(fù)雜的應(yīng)用,利用外部程序是必要的,這包括系統(tǒng)本身提供的外部命令和第三方提供的工具或者軟件。批處理文件,或稱為批
2、處理程序,是由一條條的DOS命令組成的普通文本文件,可以用記事本直接編輯或用DOS命令創(chuàng)建,也可以用DOS下的文本編輯器Edit.exe來編輯。在命令提示下鍵入批處理文件的名稱,或者雙擊該批處理文件,系統(tǒng)就會(huì)調(diào)用Cmd.exe運(yùn)行該批處理程序。一般情況下,每條命令占據(jù)一行;當(dāng)然也可以將多條命令用特定符號(hào)(如:&、&、|、|等)分隔后寫入同一行中;還有的情況就是像if、for等較高級(jí)的命令則要占據(jù)幾行甚至幾十幾百行的空間。系統(tǒng)在解釋運(yùn)行批處理程序時(shí),首先掃描整個(gè)批處理程序,然后從第一行代碼開始向下逐句執(zhí)行所有的命令,直至程序結(jié)尾或遇見exit命令或出錯(cuò)意外退出。編輯本段簡(jiǎn)單批處理命令簡(jiǎn)介echo
3、命令打開回顯或關(guān)閉請(qǐng)求回顯功能,或顯示消息。如果沒有任何參數(shù),echo批處理與聯(lián)機(jī)處理命令將顯示當(dāng)前回顯設(shè)置。語法echoon|offmessageSample:echo off/echo hello world在實(shí)際應(yīng)用中我們會(huì)把這條命令和重定向符號(hào)(也稱為管道符號(hào),一般用)結(jié)合來實(shí)現(xiàn)輸入一些命令到特定的文件中。rem命令注釋命令,類似于在C語言中的/*-*/,它并不會(huì)被執(zhí)行,只是起一個(gè)注釋的作用,便于別人閱讀和你自己日后修改。:也具有rem的功能但:和rem還是有區(qū)別的,當(dāng)關(guān)閉回顯時(shí),rem和:后的內(nèi)容都不會(huì)顯示。順序批處理但是當(dāng)打開回顯時(shí),rem和rem后的內(nèi)容會(huì)顯示出來,然而:后的內(nèi)容
4、仍然不會(huì)顯示。Rem Message Sample:Rem Here is the description.pause命令暫停命令。運(yùn)行Pause命令時(shí),將顯示下面的消息:Press any key to continue.(或:請(qǐng)按任意鍵繼續(xù).)Sample:echo off:begin copy G:*.*d:back echo請(qǐng)插入另一張光盤.pause goto begin在這個(gè)例子中,驅(qū)動(dòng)器G中磁盤上的所有文件均復(fù)制到d:back中。顯示的注釋提示您將另一張光盤盤放入驅(qū)動(dòng)器G時(shí),pause命令會(huì)使程序掛起,以便您更換光盤,然后按任意鍵繼續(xù)處理。call命令從一個(gè)批處理程序調(diào)用另一個(gè)批
5、處理程序,并且不終止父批處理程序。call批處理功能界面命令接受用作調(diào)用目標(biāo)的標(biāo)簽。如果在腳本或批處理文件外使用Call,它將不會(huì)在命令行起作用。語法callDrive:Path:labelarguments參數(shù)Drive:Path指定要調(diào)用的批處理程序的位置和名稱。start命令調(diào)用外部程序,所有的DOS命令和命令行程序都可以由start命令來調(diào)用。如:start calc.exe即可打開Windows的計(jì)算器。常用參數(shù):MIN開始時(shí)窗口最小化SEPARATE在分開的空間內(nèi)開始16位Windows程序HIGH在HIGH優(yōu)先級(jí)類別開始應(yīng)用程序REALTIME在REALTIME優(yōu)先級(jí)類別開始應(yīng)用
6、程序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í)行批處理程序。語法:goto label(label是參數(shù),指定所要轉(zhuǎn)向的批處理程序中的行。)Sample:if%1=goto noparms if%2=goto noparms(如果這里的if、%1、%2你不明白的話,先跳過去,后面會(huì)有詳細(xì)的解釋。)Rem check parameters
7、if null show usage:noparms echo Usage:monitor.bat ServerIP PortNumber goto end標(biāo)簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個(gè):選擇批處理用來表示這個(gè)字母是標(biāo)簽,goto命令就是根據(jù)這個(gè):來尋找下一步跳到到那里。最好有一些說明這樣你別人看起來才會(huì)理解你的意圖啊。set命令顯示、設(shè)置或刪除變量。顯示變量:set或set s前者顯示批處理當(dāng)前已定義的所有變量及其值,后者顯示所有以s開頭的變量及值。設(shè)置變量:set aa=abcd此句命令便可向變量aa賦值abcd。如果變量aa已被定義,則aa的值被修改為abcd
8、;若aa尚未定義,則此句命令即可定義新的變量aa,同時(shí)為變量aa賦予初始值abcd。刪除變量:set aa=此句命令即可刪除變量aa。若變量aa已被定義,則刪除變量aa;若aa尚未定義,則此句命令無實(shí)質(zhì)意義。需要說明的是,批處理中的變量是不區(qū)分類型的,不需要像C語言中的變量那樣還要區(qū)分int、float、char等。比如執(zhí)行set aa=345后,變量aa的值既可以被視為數(shù)字345,也可以被視為字符串345。set命令具有擴(kuò)展功能,如用作交互輸入、字符串處理、數(shù)值計(jì)算等,屬于高級(jí)命令范疇。編輯本段批處理符號(hào)簡(jiǎn)介回顯屏蔽表示不顯示后面的命令,在入侵過程中(例如使用批處理來格式化敵人批處理過程的硬
9、盤)自然不能讓對(duì)方看到你使用的命令啦。用法舉例:通過運(yùn)行批處理文件對(duì)比pause和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
10、.txt中的原有內(nèi)容,而a.txt并不擦除原有內(nèi)容,僅在a.txt文件的末尾添加信息aaaaa。a.txt不存在時(shí),二者沒有差別。重定向2將輸入信息來源重定向?yàn)橹付ǖ脑O(shè)備或文件。系統(tǒng)默認(rèn)從顯示器讀取輸入信息。重定向使用舉例:=echo off echo abcdefg-這是文件a.txt中的信息a.txt echo請(qǐng)任意輸入字符,以回車結(jié)束:set/p ifo=cls echo【從屏幕獲得的輸入信息】echo%ifo%set/p ifo=a.txt echo【從文件a.txt獲得的輸入信息】echo%ifo%pause nul=讀者觀察命令與輸出即可體會(huì)到重定向的功能和效果。管道符號(hào)|將管道符
11、號(hào)前面命令的輸出結(jié)果重定向輸出到管道符號(hào)后面的命令中去,作為后面命令的輸入。使用格式為:command_1|command_2管道符號(hào)使用舉例:=echo off echo aaaa a.txt del/p a.txt pause=echo off echo aaaa a.txt echo y|del/p a.txt pause=對(duì)比以上兩個(gè)批處理執(zhí)行結(jié)果,讀者即可明白管道符的用法和效果。需要說明的是,上面del命令添加開關(guān)/p只是為了讓讀者明白管道符號(hào)的使用方法,實(shí)際刪除文件時(shí)不加/p開關(guān)即可實(shí)現(xiàn)無提示直接刪除。轉(zhuǎn)義符將特殊符號(hào)轉(zhuǎn)化為一般符號(hào),即剝離特殊符號(hào)的特殊地位。特殊符號(hào)指:|&比如,
12、如果我們想輸出符號(hào),直接用命令echo是不行的,必須修改為echo。其余幾個(gè)特殊符號(hào)類似需要有同樣的處理。轉(zhuǎn)義字符使用舉例:=echo off echo aaaa a.txt echo第一句echo執(zhí)行完畢echo aaaaa.txt echo第二句echo執(zhí)行完畢pause=比較上面的兩句echo,第一句echo將信息aaaa輸出到了文件a.txt,而第二句echo則在直接屏幕上顯示出aaaa a.txt邏輯命令符邏輯命令符包括:&、&、|&-它的作用是用來連接n個(gè)DOS命令,并把這些命令按順序執(zhí)行,而不管是否有命令執(zhí)行失??;&-當(dāng)&前面的命令成功執(zhí)行時(shí),執(zhí)行&后面的命令,否則不執(zhí)行;|-當(dāng)
13、|前面的命令失敗時(shí),執(zhí)行|后面的命令,否則不執(zhí)行。=echo off echo|reg add HKCU/v try/f|echo*成功*reg add HKCU1/v try/f|echo*失敗*echo® delete HKCU/v try/f&echo*成功*reg delete HKCU/v try/f&echo*失敗*echo® 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)和我
14、們自己給出的結(jié)果,既可以驗(yàn)證邏輯命令的判斷機(jī)理。編輯本段常用DOS命令釋義文件夾管理cd顯示當(dāng)前目錄名或改變當(dāng)前目錄。md創(chuàng)建目錄。rd刪除一個(gè)目錄。dir顯示目錄中的文件和子目錄列表。tree以圖形顯示驅(qū)動(dòng)器或路徑的文件夾結(jié)構(gòu)。path為可執(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比較兩
15、個(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顯示、修改局域網(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ì)
16、于以上列出的所有命令,在cmd中輸入命令+/?即可查看該命令的幫助信息。如find/?編輯本段語句結(jié)構(gòu)釋義類似于C語言,批處理也有它的語句結(jié)構(gòu)。批處理的語句結(jié)構(gòu)主要有選擇結(jié)構(gòu)(if語句)、循環(huán)結(jié)構(gòu)(for語句)等。if語句(選擇結(jié)構(gòu))if語句實(shí)現(xiàn)條件判斷,包括字符串比較、存在判斷、定義判斷等。通過條件判斷,if語句即可以實(shí)現(xiàn)選擇功能。1、字符串比較if語句僅能夠?qū)蓚€(gè)字符(串)是否相同、先后順序進(jìn)行判斷等。其命令格式為:IFnotstring1 compare-op string2 command1else command2其中,比較操作符compare-op有以下幾類:=-等于EQU-等于N
17、EQ-不等于LSS-小于LEQ-小于或等于GTR-大于GEQ-大于或等于選擇開關(guān)/i則不區(qū)分字符串大小寫;選擇not項(xiàng),則對(duì)判斷結(jié)果進(jìn)行邏輯非。字符串比較示例:=echo off set str1=abcd1233 set str2=ABCD1234 if%str1%=%str2%(echo字符串相同!)else(echo字符串不相同!)if/i%str1%LSS%str2%(echo str1str2)else(echo str1=str2)echo.set/p choice=是否顯示當(dāng)前時(shí)間?(y/n)if/i not%choice%EQU necho當(dāng)前時(shí)間是:%date%time%pa
18、use nul=對(duì)于最后一個(gè)if判斷,當(dāng)我們輸入n或N時(shí)的效果是一樣的,都不會(huì)顯示時(shí)間。如果我們?nèi)∠_關(guān)/i,則輸入N時(shí),依舊會(huì)顯示時(shí)間。另外請(qǐng)注意一下幾個(gè)細(xì)節(jié):1-echo str1str2和echo str1=str2;2-echo.。2、存在判斷存在判斷的功能是判斷文件或文件夾是否存在。其命令格式為:IFNOTEXIST command1else command2=echo off if exist%0 echo文件%0是存在的!if not exist%df0(echo文件夾%df0不存在!)else echo文件夾%df0存在!pause nul=這里注意幾個(gè)地方:1-存在判斷既可以
19、判斷文件也可以判斷文件夾;2-%0即代表該批處理的全稱(包括驅(qū)動(dòng)器盤符、路徑、文件名和擴(kuò)展類型);3-%df0是對(duì)%0的修正,只保留了其驅(qū)動(dòng)器盤符和路徑,詳情請(qǐng)參考for/?,屬高級(jí)批處理范疇;4-注意if語句的多行書寫,多行書寫要求command1的左括號(hào)必須和if在同一行、else必須和command1的右括號(hào)同行、command2的左括號(hào)必須與else同行、command1和command2都可以有任意多行,即command可以是命令集。3、定義判斷定義判斷的功能是判斷變量是否存在,即是否已被定義。其命令格式為:IFnotDEFINED variable command1else com
20、mand2存在判斷舉例:=echo off set var=111 if 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.asm if errorlevel 1pause&edit%1.asm link%1.obj先對(duì)源代碼進(jìn)行匯編,如果失敗則暫停顯示錯(cuò)誤信息,并在按任意鍵后自動(dòng)進(jìn)入編輯界面;否則用link程序連接生成的obj文件,
21、這種用法是先判斷前一個(gè)命令執(zhí)行后的返回碼(也叫錯(cuò)誤碼,DOS程序在運(yùn)行完后都有返回碼),如果和定義的錯(cuò)誤碼符合(這里定義的錯(cuò)誤碼為1),則執(zhí)行相應(yīng)的操作(這里相應(yīng)的操作為pause&edit%1.asm部分)。另外,和其他兩種用法一樣,這種用法也可以表示否定。用否定的形式仍表達(dá)上面三句的意思,代碼變?yōu)椋簃asm%1.asm if not errorlevel 1link%1.obj pause&edit%1.asm for語句(循環(huán)結(jié)構(gòu))for語句可以實(shí)現(xiàn)類似于C語言里面的循環(huán)結(jié)構(gòu),當(dāng)然for語句的功能要更強(qiáng)大一點(diǎn),通過不同的開關(guān)可以實(shí)現(xiàn)更多的功能。for語句有多個(gè)開關(guān),不同開關(guān)將會(huì)實(shí)現(xiàn)不同的
22、功能。1、無開關(guān)無開關(guān)的for語句能夠?qū)υO(shè)定的范圍內(nèi)進(jìn)行循環(huán),是最基本的for循環(huán)語句。其命令格式為:FOR%variable IN(set)DO command其中,%variable是批處理程序里面的書寫格式,在DOS中書寫為%variable,即只有一個(gè)百分號(hào)(%);set就是需要我們?cè)O(shè)定的循環(huán)范圍,類似于C語言里面的循環(huán)變量;do后面的command就是循環(huán)所執(zhí)行的命令,即循環(huán)體。無開關(guān)for語句舉例:=echo off for%i in(a,b c,d)do echo%i pause nul=2、開關(guān)/L含開關(guān)/L的for語句,可以根據(jù)set里面的設(shè)置進(jìn)行循環(huán),從而實(shí)現(xiàn)對(duì)循環(huán)次數(shù)的直
23、接控制。其命令格式為: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語句舉例(創(chuàng)建5個(gè)文件夾):=echo off for/l%i in(1,2,10)do md%i pause=上例將新建5個(gè)文件夾,文件夾名稱依次為1、3、5、7、9。可以發(fā)現(xiàn),%i的結(jié)束值并非end的值10,而是不大于end的一個(gè)數(shù)。3、開關(guān)/F含開關(guān)/F的for語句具有最強(qiáng)大的功能,它能夠?qū)ψ址M(jìn)行操作,也能夠?qū)γ畹姆祷刂颠M(jìn)行操作,還可
24、以訪問硬盤上的ASCII碼文件,比如txt文檔等。其命令格式為:FOR/Foptions%variable IN(set)DO command其中,set為(string、command、)中的一個(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)。含開關(guān)/F的for語句舉例:=echo off echo*No Options:for/f%a in(1,2,10)do echo a=%a echo*Options
25、 tokens&delims:for/ftokens=1-3 delims=,%a in(1,2,10)do echo a=%a b=%b c=%c pause=echo off echo本文件夾里面的文件有:for/fskip=5 tokens=3*delims=%a in(dir)do(if not%a=DIRif not%b=字節(jié)if not%b=可用字節(jié)echo%b)pause=echo off echo本文件夾里面的文件有:dir c: for/fskip=5 tokens=3*delims=%a in(c:)do(if not%a=DIRif not%b=字節(jié)if not%b=可用
26、字節(jié)echo%b)del c: pause=對(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語句的do后面的command也是可以分行的,只需要保證command的左括號(hào)和do在同一行就可以了。4、開關(guān)/D或/R含開關(guān)/D或/R的for語句是與目錄或文件有關(guān)的命令,一般情況下很少使用。含開關(guān)/R的命令有時(shí)候被用于通過遍歷文件夾來查找
27、某一個(gè)文件或文件夾,故而列舉此例。含開關(guān)/R的for語句舉例(文件夾遍歷):=echo off setlocal enabledelayedexpansion FOR/R d:%i IN(.)DO(set dd=%i setdd=!dd:0,-1!echo!dd!)pause exit=上例即可以羅列出D盤下的所有文件夾,其速度要比命令tree d:慢多了,不過其返回結(jié)果的實(shí)用性則遠(yuǎn)遠(yuǎn)超過了tree命令。一般情況下我們不推薦通過遍歷文件夾來查找文件,特別是在查找某些程序(比如QQ.exe)的位置時(shí)。推薦通過reg命令查找注冊(cè)表來查找QQ的路徑,以保證查找效率。上例中也出現(xiàn)了幾個(gè)新面孔,如set
28、local、感嘆號(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語句是批處理里面功能最強(qiáng)大、使用最普遍卻又最難掌握的一套命令,這也是批處理菜鳥和批處理高手最明顯的一個(gè)分水嶺,一旦掌握了這套命令,那么你就離批處理達(dá)人不遠(yuǎn)了!編輯本段字符串處理釋義批處理有著具有非常強(qiáng)大的字符串處理能力,其功能絕不低于C語言里面的字符串函數(shù)集。批處理
29、中可實(shí)現(xiàn)的字符串處理功能有:截取字符串內(nèi)容、替換字符串特定字段、合并字符串、擴(kuò)充字符串等功能。下面對(duì)這些功能一一進(jìn)行講解。1、截取字符串截取字符串可以說是字符串處理功能中最常用的一個(gè)子功能了,能夠?qū)崿F(xiàn)截取字符串中的特定位置的一個(gè)或多個(gè)字符。舉例說明其基本功能:=echo off set ifo=abcdefghijklmnopqrstuvwxyz0 12 3456789 echo原字符串(第二行為各字符的序號(hào)):echo%ifo%echo 1234567890 123 456789123456 echo截取前5個(gè)字符:echo%ifo:0,5%echo截取最后5個(gè)字符:echo%ifo:-5%
30、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)行處理。=echo off echo當(dāng)前時(shí)間是:%time%即%time:0,2%點(diǎn)%time:3,2%分%time:6,2%秒%time:9,2%厘秒pause=2、替換字符串替換字符串,即將某一字符串中的特定字符或字符串替換為給定的字符串。舉例說明其功能:=echo
31、off set aa=偉大的中國(guó)!我為你自豪!echo替換前:%aa%echo替換后:%aa:中國(guó)=中華人民共和國(guó)%echo aa=%aa%setaa=%aa:中國(guó)=中華人民共和國(guó)%echo aa=%aa%pause=對(duì)于上面的例子有一點(diǎn)說明,對(duì)比兩個(gè)echo aa=%aa%可以發(fā)現(xiàn),如果要修改變量aa的內(nèi)容的話,就需要將修改結(jié)果%aa:中國(guó)=中華人民共和國(guó)%賦值給變量aa。上面的字符串截取也有著同樣的特點(diǎn)。3、字符串合并其實(shí),合并字符串就是將兩個(gè)字符串放在一起就可以了。舉例說明:=echo off set aa=偉大的中國(guó)!set bb=我為你自豪!echo%aa%bb%echo aa=%a
32、a%echo bb=%bb%setaa=%aa%bb%echo aa=%aa%pause=同樣,如果要改變變量aa的內(nèi)容的話,就需要將合并結(jié)果%aa%bb%賦值給變量aa。4、擴(kuò)充字符串?dāng)U充這個(gè)詞匯來自于微軟自己的翻譯,意思就是對(duì)表示文件路徑的字符串進(jìn)行特殊的處理,具體功能羅列如下:=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
33、擴(kuò)充到文件的大小%$PATH:I-查找列在路徑環(huán)境變量的目錄,并將%I擴(kuò)充到找到的第一個(gè)完全合格的名稱。如果環(huán)境變量名未被定義,或者沒有找到文件,此組合鍵會(huì)擴(kuò)充到空字符串可以組合修飾符來得到多重結(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、該字符串
34、代表一個(gè)文件路徑;2、變量要用%x來表示,x可取a-z A-Z 0-9共62個(gè)字符中的任意一個(gè)。舉例說明:=echo off echo正在運(yùn)行的這個(gè)批處理:echo完全路徑:%0 echo去掉引號(hào):%0 echo所在分區(qū):%d0 echo所處路徑:%p0 echo文件名:%n0 echo擴(kuò)展名:%x0 echo文件屬性:%a0 echo修改時(shí)間:%t0 echo文件大?。?z0 pause=其中的%0是批處理里面的參數(shù),代表當(dāng)前運(yùn)行的批處理的完全路徑。類似的還有%1-%9,分別代表傳遞來的第1-9個(gè)參數(shù)。例子如下:=echo off set aa=C:WindowsPPPa.btx call:
35、deal aaa%aa%c cddd eee pause nul exit:deal echo%0=%0 echo%1=%1 echo%2=%2 echo%3=%3 echo%4=%4 echo%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語句,for語句里面的變量就是用%x來表示的,因而可以直接進(jìn)行擴(kuò)充。編輯本段數(shù)值計(jì)算簡(jiǎn)介批處理里面的數(shù)值計(jì)算功能較弱,只能夠進(jìn)行整型計(jì)算,忽略浮點(diǎn)數(shù)的小數(shù)部分;同時(shí)數(shù)值計(jì)算的范圍也
36、受限于系統(tǒng)位數(shù),對(duì)于目前較為常見的32位機(jī)來說,數(shù)值計(jì)算能處理的數(shù)值范圍為0x 80000000h0x7FFFFFFFh,即-2147483648+2147483647。數(shù)值計(jì)算需要使用set命令,具體格式為set/a expression。其中,expression代表計(jì)算表達(dá)式,計(jì)算表達(dá)式跟C語言里面的表達(dá)式基本上完全一致。set支持的運(yùn)算符也跟C語言里面的一樣,只是沒有了増一減一。set支持的運(yùn)算符及優(yōu)先級(jí)排序如下:=()-分組!-一元運(yùn)算符(邏輯非、按位非、取負(fù))*/%-算數(shù)運(yùn)算符(乘、除得商、除得余數(shù),即取余)+-算數(shù)運(yùn)算符(加、減)-邏輯移位(左移一位、右移一位)&-按位與-按位異
37、|-按位或=*=/=%=+=-=-賦值&=|=,-表達(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)制。編輯本段批處理概念方法簡(jiǎn)介學(xué)習(xí)有關(guān)批處理的一些比較瑣碎、但又比較有價(jià)值的一些知識(shí),運(yùn)用這些知識(shí)后,才有條件更好的實(shí)現(xiàn)的批處理的功能,并能使批處理擺脫黑白世界而顯得更加多姿多彩。(一)環(huán)境變量所謂環(huán)境變量,實(shí)際上就是C語言里面
38、的變量的意思。批處理的變量可以分為兩類,由系統(tǒng)定義的系統(tǒng)變量和由用戶根據(jù)需要自定義的用戶變量?!?、系統(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ī)名稱ComSpec cmd.exe完整路徑名HomeDrive系統(tǒng)分區(qū)盤符,一般都是C盤,故而HomeDrive=C:Path可執(zhí)行文件默認(rèn)搜索
39、路徑。這個(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:WINDOWS Temp、Tmp文件、程序等可使用的臨時(shí)目錄,默認(rèn)是C:WINDOWSTemp或Tmp。幾乎所有的程序在運(yùn)行時(shí)都會(huì)在這個(gè)目錄里面臨時(shí)寫入文件。一般情況下,程序?qū)懭氲呐R時(shí)文件都應(yīng)該被該程序刪除,可惜的是,大部分的程序都很健
40、忘,導(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í)要覆蓋C盤內(nèi)容的,所以桌面上或我的文檔里面的東西當(dāng)然就會(huì)Gone with the Wind了解決方法有兩個(gè)
41、,一是保持良好的習(xí)慣,不把重要文件放到這兩個(gè)地方;二是,修改默認(rèn)設(shè)置,將這兩個(gè)文件夾都移到其他分區(qū)。WinDir操作系統(tǒng)路徑,其實(shí)就是SystemRoot了(二)用戶變量編寫批處理程序時(shí),用戶根據(jù)需要自己定義的變量稱之為用戶變量。用戶變量類似于C語言里面的變量,僅僅在定義該變量的程序中有效。用戶變量由set命令定義,這是批處理中非常非常重要的一個(gè)操作,從而使set命令成為批處理里面使用頻率最高的幾個(gè)命令之一。關(guān)于set命令的使用,參考set/?,本教程也會(huì)在后面對(duì)其進(jìn)行講解?!?、變量引用】前面的幾節(jié)課里面,我們已經(jīng)看到了如何引用變量,即直接用變量名操作變量,通過%或!來獲取變量的值。其中,只
42、有在for語句里面重復(fù)對(duì)同一變量多次賦值時(shí)才需要使用!,并且在使用!調(diào)用變量時(shí),要首先啟用延遲環(huán)境變量擴(kuò)充,啟動(dòng)命令為:SetLocal EnableDelayedExpansion。另外需要說明的是,啟用延遲環(huán)境變量擴(kuò)充后,所有的!都將被視為取變量值的特殊符號(hào),即使用!也不能輸出符號(hào)!。若要輸出!,則需要停用延遲環(huán)境變量擴(kuò)充,命令為:SetLocal DisableDelayedExpansion(三)參數(shù)跟C語言類似,在調(diào)用函數(shù)或其他批處理時(shí)可能需要傳遞參數(shù)。批處理的參數(shù)傳遞分為直接和間接兩種傳遞參數(shù)的方法?!?、直接傳遞】直接傳遞參數(shù),即在使用call命令時(shí),不使用任何參數(shù),在子函數(shù)或子
43、批處理里面直接對(duì)主函數(shù)(也稱父批處理)里面的變量進(jìn)行修改。這跟匯編語言里面的參數(shù)傳遞方式類似。直接傳遞參數(shù)舉例:=echo off setlocal enabledelayedexpansion set var=aCdehiM,?mnrstW yecho%var%call:deal setlocal disabledelayedexpansion set var=%var:?=!%echo%var%pause nul exit:deal set 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
44、,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被修改后的值了。該例子中,使用了本節(jié)課前面講到的setlocal enabledelayedexpansion和setlocal disabledelayedexpansion,前者保證了var在for循環(huán)里面能夠根據(jù)我們的意愿進(jìn)行處理,后者保證了能夠正確輸出符號(hào)!。另外例子中還使用了命令set,利用set對(duì)字符串進(jìn)行了處理。還有一個(gè)地方使用了語句goto
45、:eof,該語句相當(dāng)于C語言里面的return或匯編語言里面的RET,即子程序返回命令。需要說明的是,當(dāng)子函數(shù)本身就在批處理文件的末尾的話,我們是可以省略這句話的,比如將此例的goto:eof刪除是不會(huì)產(chǎn)生任何影響的?!?、間接傳遞】間接傳遞參數(shù),即在使用call命令時(shí),在其后面添加參數(shù),形如call:labelChildBatchParameter1 Parameter2.ParameterN。這跟C語言里面?zhèn)鬟f參數(shù)的格式類似。不同于C語言,批處理中的子函數(shù)不需要定義形參,更不需要指定參數(shù)的個(gè)數(shù)。傳遞過來的參數(shù),在子函數(shù)或子批處理里面是以%1%9的形式表示的,即%1%9分別表示傳遞過來的第1
46、9個(gè)參數(shù)。=echo off call:deal aaa bbbc cddd eee pause nul exit:deal echo%0=%0 echo%1=%1 echo%2=%2 echo%3=%3 echo%4=%4 echo%5=%5=通過這個(gè)例子就可以清晰的看到%n參數(shù)表示法的用法。參數(shù)列表中包含空格的依舊要用雙引號(hào)()引起來;另外,也可以看到,%0已經(jīng)變成了子函數(shù)的標(biāo)號(hào)了,而不是父批處理的文件名全稱?!?、區(qū)別】這兩種參數(shù)傳遞方法本質(zhì)上是沒有區(qū)別的,形式上,直接傳遞直接對(duì)原變量進(jìn)行操作,丟失了原變量的值;間接傳遞則通過%n對(duì)原變量進(jìn)行了簡(jiǎn)單的備份,并且通用性更強(qiáng),即不限定原變量的
47、名稱。另外,使用%n還有一個(gè)非常大的好處,就是可以通過%*i來加強(qiáng)處理變量的能力。關(guān)于%*i,詳細(xì)內(nèi)容參見for/?。針對(duì)二者的差別,可以根據(jù)情況決定使用哪種傳遞方式:-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語言里面的exit(num),num就是
48、錯(cuò)誤代碼。獲取返回值errorlevel的方法就是,在執(zhí)行命令后,立馬調(diào)用返回值errorlevel,如echo%errorlevel%或者if%errorlevel%=1等命令。errorlevel舉例:=echo off reg add HKCU/v try/f nul reg delete HKCU/v try/f if errorlevel 0(echo刪除成功!)else(echo刪除失??!)reg delete HKCU/v try/f if%errorlevel%=0(echo刪除成功!)else(echo刪除失敗!)pause nul=上面例子中,由于第一成功的刪除了注冊(cè)表,導(dǎo)
49、致第二次因?yàn)檎也坏阶?cè)表而宣告失敗。同時(shí)我們也看到了errorlevel的使用方法,即if errorlevel 0和if%errorlevel%=0是一樣的。也許你注意到了,里面還有個(gè)笑臉呢O(_)O哈哈這就是ASCII碼啦,后面跟你講啊一般情況下,程序或命令成功執(zhí)行時(shí),返回的errorlevel是0,錯(cuò)誤時(shí)返回1或更高的值。當(dāng)然,有些命令是沒有返回值的,這點(diǎn)需要注意。嗯,有沒有想起前面有個(gè)類似的東西啊?對(duì)了,那就是|和&了,這兩個(gè)符號(hào)就是根據(jù)errorlevel的值來進(jìn)行邏輯判斷的(五)用戶交互批處理,黑框白字是它最著名的特征。雖然當(dāng)初DOS為人們使用計(jì)算機(jī)做出了莫大的貢獻(xiàn),但在Windo
50、ws盛行的今天,人們已經(jīng)疏遠(yuǎn)并且懼怕那個(gè)黑色的窗口了。微軟為了讓先天有著批量處理體力活能力的DOS避免冷酷,便于接近,特意提供了幾個(gè)小命令,加強(qiáng)批處理的用戶交互功能?!?、視窗】首先我們要DIY它的窗口。使用命令:color、mode、msg。-1、設(shè)置窗口背景色和字體顏色by color。詳細(xì)內(nèi)容參見color/?。-2、設(shè)置窗口大小byMODE CONCOLS=cLINES=n,cols即寬度,lines即高度。-3、GUI交互窗口by msg。詳細(xì)內(nèi)容參見msg/?。視窗DIY舉例:=echo off set a=10 set b=0:tex set/a a+=3 set/a b+=1
51、mode con cols=%a%lines=%b%if%a%lss 60 goto:tex echo O(_)O圣誕快樂O(_)O set a=15,a6,2e,d0,34,8b,4f,9d,5e for%i in(%a%)do(ping-n 2127.1 nul color%i)for%i in(%a%,%a%)do(ping-n 1127.1 nul color%i)ms.txt echo*/.*.ms.txt echo.*.*_ ms.txt echo*/./.|ms.txt echo*,/,.,.,.ms.txt echo|.#田田|ms.txt echo|&|o ms.txt echo|#msg%username%/w/time:3600 ms.txt del ms.txt pause=【2、聲音】呵呵,是不是注意到了批處理沒有聲音吶?閑話不說,直接做實(shí)驗(yàn)吧_=echo off echo做好準(zhǔn)備,響了啊!pause cls echo echo怎么樣?呵呵,刺激吧pause cls mshta vbscript:
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025廣東惠州市龍門龍城創(chuàng)展經(jīng)濟(jì)發(fā)展有限責(zé)任公司招聘5人公考前自測(cè)高頻考點(diǎn)模擬試題附答案
- 2025安徽六安市金寨縣消防救援局政府專職消防員招聘10人(公共基礎(chǔ)知識(shí))綜合能力測(cè)試題附答案
- 2025廣西北海市合浦縣人民醫(yī)院校園雙選會(huì)招聘43人(公共基礎(chǔ)知識(shí))綜合能力測(cè)試題附答案
- 2025山東濟(jì)南城投集團(tuán)校園招聘63人模擬試卷附答案
- 2025年安陽(yáng)縣面向中小學(xué)教師選調(diào)鄉(xiāng)鎮(zhèn)所屬事業(yè)單位工作人員50名(公共基礎(chǔ)知識(shí))綜合能力測(cè)試題附答案
- 2025年甘肅昊源工貿(mào)有限責(zé)任公司招聘?jìng)淇碱}庫(kù)附答案
- 2025年伊春豐林縣人民檢察院公開招聘聘用制書記員2人考試歷年真題匯編附答案
- 2026河北邯鄲市公安局峰峰礦區(qū)分局招錄輔警60人筆試備考試題及答案解析
- 2025年上??茖W(xué)院事業(yè)單位工作人員公開招聘?jìng)淇碱}庫(kù)(第四批)附答案
- 2026重慶水利電力職業(yè)技術(shù)學(xué)院高層次人才招聘筆試備考題庫(kù)及答案解析
- 醫(yī)療衛(wèi)生機(jī)構(gòu)6S常態(tài)化管理打分表
- 幾種常用潛流人工濕地剖面圖
- 危險(xiǎn)源辨識(shí)、風(fēng)險(xiǎn)評(píng)價(jià)、風(fēng)險(xiǎn)控制措施清單-05變電站工程5
- 2023年副主任醫(yī)師(副高)-推拿學(xué)(副高)考試歷年真題摘選帶答案
- 朱子治家格言(朱子家訓(xùn))課件
- 20S517 排水管道出水口
- vpap iv st說明總體操作界面
- 初中一年級(jí)(7年級(jí))上學(xué)期生物部分單元知識(shí)點(diǎn)
- 長(zhǎng)興中學(xué)提前招生試卷
- 2022年基礎(chǔ)教育國(guó)家級(jí)教學(xué)成果獎(jiǎng)評(píng)審工作安排
- 生物統(tǒng)計(jì)學(xué)(課堂PPT)
評(píng)論
0/150
提交評(píng)論