批處理基礎(chǔ)知識_第1頁
批處理基礎(chǔ)知識_第2頁
批處理基礎(chǔ)知識_第3頁
批處理基礎(chǔ)知識_第4頁
批處理基礎(chǔ)知識_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一節(jié)常用批處理內(nèi)部命令簡介

批處理定義:顧名思義,批處理文件是將一系列命令按一定的順序集合為?個可執(zhí)行的文本

文件,其擴展名為BAT或者CMD。這些命令統(tǒng)稱批處理命令。

小知識:可以在鍵盤上按下Ctrl+C組合鍵來強行終止?個批處理的執(zhí)行過程。

了解了大概意思后,我們正式開始學(xué)習(xí).先看一個簡單的例子!

@echooff

echo"歡迎來到非常BAT!"

pause

把上面的3條命令保存為文件test.bat或者test.cmd然后執(zhí)行,

他就會在屏幕上顯示以下二行話:

歡迎來到非常BAT!

請按任意鍵繼續(xù)...

這就是一個簡單批處理文件了,這個批處理文件一共就用了2條命令"echo"和"pause"還

有一個特殊符號"@"

從上面這個簡單的批處理中,我們可以發(fā)現(xiàn)其實批處理就是運用一些含有特殊意義的符號利

一些完成指定功能的命令組合而成,那么在批處理中有多少這樣的特殊符號和功能命令呢?

我們現(xiàn)在就來仔細了解一下一些最常用的!

(以下內(nèi)容來源網(wǎng)絡(luò),請各位仔細閱讀,好進入下節(jié)的實例說明)

批處理的常見命令(未列舉的命令還比較多,請查閱幫助信息)

1、REM和::

2、ECHO和@

3、PAUSE

4、ERRORLEVEL

5、TITLE

6、COLOR

7->mode配置系統(tǒng)設(shè)備

8、GOTO和:

9、FIND

10.START

11>assoc和ftype

12、pushd和popd

13、CALL

14、shift

15、IF

16、setlocal與變量延遲

介紹命令

1、REM和::

REM為注釋命令,一般用來給程序加上注解,該命令后的內(nèi)容不被執(zhí)行,但能回顯。

其次,::也可以起到rem的注釋作用,而且更簡潔有效;但有兩點需要注意:

第一,任何以冒號:開頭的字符行,在批處理中都被視作標(biāo)號,而直接忽略其后的所有內(nèi)容。

有效標(biāo)號:冒號后緊跟一個以字母數(shù)字開頭的字符串,goto語句可以識別。

無效標(biāo)號:冒號后緊跟一個非字母數(shù)字的一個特殊符號,goto無法識別的標(biāo)號,可以起到注

釋作用,所以::常被用作注釋符號,其實:+也可起注釋作用。

第二,與rem不同的是,::后的字符行在執(zhí)行時不會回顯,無論是否用echoon打開命令行回

顯狀態(tài),因為命令解釋器不認為他是一個有效的命令行,就此點來看,rem在某些場合下將

比::更為適用;另夕卜,rem可以用于config.sys文件中。

2、ECHO和@

打開回顯或關(guān)閉回顯功能,或顯示消息。如果沒有任何參數(shù),echo命令將顯示當(dāng)前回顯設(shè)

置。

@字符放在命令前將關(guān)閉該命令回顯,無論此時echo是否為打開狀態(tài)。

語法:

echo[{on|off}][message]

echo.#此用法將顯示一空行,相當(dāng)于回車,非常有用。

執(zhí)行echooff將關(guān)閉回顯,它后面的所有命令都不顯示命令本身,只顯示執(zhí)行后的結(jié)果,除

非執(zhí)行echoon命令。

執(zhí)行@echooff不但關(guān)閉以后命令的回顯,連echoo年命令本身也不顯示了。

通常以@echooff作為批處理程序的首行。

一般用ECHOMESSAGE來顯示一個特定的消息。

例:

@Echooff

Echohello

Pause

運行顯示:hello

3、PAUSE

PAUSE,玩游戲的人都知道,暫停的意思

在這里就是停止系統(tǒng)命令的執(zhí)行并顯示下面的內(nèi)容。

例:

PAUSE

運行顯示:

請按任意鍵繼續(xù)...

要顯示其他提示語,可以這樣用:

Echo其他提示語&pause>nul

4、errorlevel

程序返回碼

echo%errorlevel%

每個命令運行結(jié)束,可以用這個命令行格式查看返回碼

用于判斷剛才的命令是否執(zhí)行成功

默認值為0,一般命令執(zhí)行出錯會設(shè)errorlevel為1

5、title

設(shè)置cmd窗口的標(biāo)題

title新標(biāo)題#可以看到cmd窗口的標(biāo)題欄變了

6、COLOR

設(shè)置默認的控制臺前景和背景顏色。

COLOR[attr]

attr指定控制臺輸出的顏色屬性

顏色屬性由兩個十六進制數(shù)字指定-第一個為背景,第二個則為

前景。每個數(shù)字可以為以下任何值之一:

0=黑色8=灰色

1=藍色9=淡藍色

2=綠色A=淡綠色

3=湖藍色8=淡淺綠色

4=紅色C=淡紅色

5=紫色D=淡紫色

6=黃色E=淡黃色

7=白色F=亮白色

如果沒有給定任何參數(shù),該命令會將顏色還原到CMD.EXE啟動時

的顏色。這個值來自當(dāng)前控制臺窗口、“開關(guān)或

DefaultColor注冊表值。

如果用相同的前景和背景顏色來執(zhí)行COLOR命令,COLOR命令

會將ERRORLEVEL設(shè)置為建

例如:"COLORfc"在亮白色上產(chǎn)生亮紅色

7、mode配置系統(tǒng)設(shè)備

配置系統(tǒng)設(shè)備。

串行口:MODECOMm[:][BAUD=b][PARlTY=p][DATA=d][STOP=s]

[to=on|off][xon=on|ofl][odsr=on|off]

[octs=on|off][dtr=on|off]hs]

[rts=on|off]hs|tg][idsr=on|oft]

設(shè)備狀態(tài):MODE[device][/STATUS]

打印重定向:MODELPTn[:]=COMm[:]

選定代碼頁:MODECON[:]CPSELECT=yyy

代碼頁狀態(tài):MODECON[:]CP[/STATUS]

顯示模式:MODECON[:][COLS=c][LINES=n]

擊鍵率:MODECON[:][RATE=rDELAY=d]

例:

modeconcols=l13lines=15&color9f

此命令設(shè)置DOS窗口大?。?5行,113列

8、GOTO和:

GOTO會點編程的朋友就會知道這是跳轉(zhuǎn)的意思。

在批處理中允許以“:XXX”來構(gòu)建一個標(biāo)號,然后用GOTOXXX跳轉(zhuǎn)到標(biāo)號:XXX處,然后

執(zhí)行標(biāo)號后的命令。

例:

if{%1}={}gotonoparms

if"%2"=""gotonoparms

標(biāo)簽的名字可以隨便起,但是最好是有意義的字符串啦,前加個冒號用來表示這個字符串是

標(biāo)簽,goto命令就是根據(jù)這個冒號(:)來尋找下一步跳到到那里。最好有一些說明這樣你

別人看起來才會理解你的意圖啊。

例:

@echooff

:start

set/avar+=l

echo%var%

if%var%leq3GOTOstart

pause

運行顯示:

1

2

3

4

9、find

在文件中搜索字符串。

FIND[/V][/C][/N][/I][/OFF[LINE]]"string"[[drive:][path]filename[...]]

/V顯示所有未包含指定字符串的行。

/C僅顯示包含字符串的行數(shù)。

/N顯示行號。

/I搜索字符串時忽略大小寫。

/OFF[LINE]不要跳過具有脫機屬性集的文件。

"string"指定要搜索的文字串,

[drive:][path]filename

指定要搜索的文件。

如果沒有指定路徑,F(xiàn)IND將搜索鍵入的或者由另一命令產(chǎn)生的文字。

Find常和type命令結(jié)合使用

Type[drive:][path]filename|find"string”[>tmpfile]#挑選包含string的行

Type[drive:][path]filename|find/v"string"#剔除文件中包含string的行

Type[drive:][path]filename|find/c#顯示文件行數(shù)

以上用法將去除find命令自帶的提示語(文件名提示)

例:

@echooff

echo111>test.txt

echo222?test.txt

findMlll"test.txt

deltest.txt

pause

運行顯示如下:

-------TEST.TXT

111

請按任意鍵繼續(xù)...

例:

@echooff

echo111>test.txt

echo222?test.txt

typetest.txt|find"11ln

deltest.txt

pause

運行顯示如下:

111

清按任意鍵繼續(xù)...

10、start命令

批處理中調(diào)用外部程序的命令(該外部程序在新窗口中運行,批處理程序繼續(xù)往下執(zhí)行,不

理會外部程序的運行狀況),如果直接運行外部程序則必須等外部程序完成后才繼續(xù)執(zhí)行剩

下的指令

例:startexplorerd:\

調(diào)用圖形界面打開D盤

11>assoc和ftype

文件關(guān)聯(lián)

assoc設(shè)置,文件擴展名,關(guān)聯(lián),關(guān)聯(lián)到,文件類型'

ftype設(shè)置,文件類型,關(guān)聯(lián),關(guān)聯(lián)到執(zhí)行程序和參數(shù)’

當(dāng)你雙擊一個.txt文件時,windows并不是根據(jù).txt直接判斷用notepad.exe打開

而是先判斷.txt屬于txtfiQ文件類型'

再調(diào)用txtfile關(guān)聯(lián)的命令行txtfile=%SystcmRoot%\system32\NOTEPAD.EXE%1

可以在”文件夾選項"一"文件類型"里修改這2種關(guān)聯(lián)

assoc#顯示所有'文件擴展名'關(guān)聯(lián)

assoc.txt#顯示.txt代表的'文件類型二結(jié)果顯示.txt=txtfile

assoc.doc#顯示.doc代表的‘文件類型',結(jié)果顯示.doc=Word.Document.8

assoc.exe#顯示.exe代表的‘文件類型',結(jié)果顯示,exe=exefile

ftype#顯示所有墳:件類型,關(guān)聯(lián)

ftypeexefile#顯示exefile類型關(guān)聯(lián)的命令行,結(jié)果顯示exefile="%l"%*

assoc.txt=Word.Document.8

設(shè)置.txt為word類型的文檔,可以看至(txt文件的圖標(biāo)都變了

assoc,txt=txtfile

恢復(fù).txt的正確關(guān)聯(lián)

ftypeexefile="%l"%*

恢復(fù)exefile的正確關(guān)聯(lián)

如果該關(guān)聯(lián)已經(jīng)被破壞,可以運行,再輸入這條命令

12、pushd和popd

切換當(dāng)前目錄

@echooff

c:&cd\&mdmp3#在C:\建立mp3文件夾

mdd:\mp4#在D:\建立mp4文件夾

cd/dd:\mp4#更改當(dāng)前目錄為d:\mp4

pushdc:\mp3#保存當(dāng)前目錄,并切換當(dāng)前目錄為c:\mp3

popd#恢復(fù)當(dāng)前目錄為剛才保存的d:\mp4

一般用處不大,在當(dāng)前目錄名不確定時,會有點幫助。(dos編程中很有用)

13、CALL

CALL命令可以在批處理執(zhí)行過程中調(diào)用另一個批處理,當(dāng)另一個批處理執(zhí)行完后,再繼續(xù)

執(zhí)行原來的批處理

CALL[drive:][path]filename[batch-parameters]

調(diào)用的其它批處理程序。filename參數(shù)必須具有.bat或.cmd擴展名。

CALL:labelarguments

調(diào)用本文件內(nèi)命令段,相當(dāng)于子程序。被調(diào)用的命令段以標(biāo)簽:label開頭

以命令goto:eof結(jié)尾。

另外,批腳本文本參數(shù)參照(%0、%1、等等)已如下改變:

批腳本里的%*指出所有的參數(shù)(如%1%2%3%4%5...)

批參數(shù)(%n)的替代已被增強。您可以使用以下語法:(看不明白的直接運行后面的例子)

%~1-刪除引號("),擴充%1

%~fl-將%1擴充到一個完全合格的路徑名

%~dl-僅將%1擴充到一個驅(qū)動器號

%~pl-僅將%1擴充到一個路徑

%~nl-僅將%1擴充到一個文件名

%~xl-僅將%1擴充到一個文件擴展名

%~sl-擴充的路徑指含有短名

%~al-將%1擴充到文件屬性

%~tl-將%1擴充到文件的日期/時間

%~zl-將%1擴充到文件的大小

%~$PATH:1-查找列在PATH環(huán)境變量的目錄,并將%1

擴充到找到的第一個完全合格的名稱。如果環(huán)境

變量名未被定義,或者沒有找到文件,此組合鍵會

擴充到空字符串

可以組合修定符來取得多重結(jié)果:

%~dpl-只將%1擴展到驅(qū)動器號和路徑

%~nxl-只將%1擴展到文件名和擴展名

%~dp$PATH:l-在列在PATH環(huán)境變量中的目錄里查找%1,

并擴展到找到的第一個文件的驅(qū)動器號和路徑。

%?他al-將%1擴展到類似DIR的輸出行。

在上面的例子中,%1和PATH可以被其他有效數(shù)值替換。

%~語法被一個有效參數(shù)號碼終止。%~修定符不能跟%*使用

注意:參數(shù)擴充時不理會參數(shù)所代表的文件是否真實存在,均以當(dāng)前目錄進行擴展

要理解上面的知識,下面的例子很關(guān)鍵。

例:

@echooff

Echo產(chǎn)生一個臨時文件>tmp.txt

Rem下行先保存當(dāng)前目錄,再將c:\windows設(shè)為當(dāng)前目錄

pushdc:\windows

Call:subtmp.txt

Rem下行恢復(fù)前次的當(dāng)前目錄

Popd

Call:subtmp.txt

pause

Deltmp.txt

:sub

Echo刪除引號:31

Echo擴充到路徑:%~fl

Echo擴充到一個驅(qū)動器號:%-dl

Echo擴充到一個路徑:%~pl

氏ho擴充到一個文件名:%~nl

Echo擴充到一個文件擴展名:%~xl

Echo擴充的路徑指含有短名:%~sl

Echo擴充到文件屬性:%~al

Echo擴充到文件的日期/時間:%~tl

Echo擴充到文件的大小:%~zl

Echo擴展到驅(qū)動器號和路徑:%~dpl

Echo擴展到文件名和擴展名:%~nxl

Echo擴展到類似DIR的輸出行:

Echo.

Goto:eof

14、shift

更改批處理文件中可替換參數(shù)的位置。

SHIFT[/n]

如果命令擴展名被啟用,SHIFT命令支持/n命令行開關(guān);該命令行開關(guān)告訴

命令從第n個參數(shù)開始移位;n介于零和八之間。例如:

SHIFT/2

會將%3移位到%2,將%4移位到%3,等等;并且不影響%0和%1。

15、IF

IF條件判斷語句,語法格式如下:

IF[NOT]ERRORLEVELnumbercommand

IF[NOT]stringl=string2command

IF[NOT]EXISTfilenamecommand

下面逐一介紹,更詳細的分析請看后面章節(jié)。

(1)IF[NOT]ERRORLEVELnumbercommand

IFERRORLEVEL這個句子必須放在某?個命令的后面,執(zhí)行命令后由IFERRORLEVEL來

判斷命令的返回值。

Number的數(shù)字取值范圍0?255,判斷時值的排列順序應(yīng)該由大到小。返回的值大于等于指

定的值時,條件成立

例:

@echooff

dirc:

rem退出代碼為>=1就跳至標(biāo)題1處執(zhí)行,>=0就跳至標(biāo)題0處執(zhí)行

IFERRORLEVEL1goto1

IFERRORLEVEL0goto0

Rem上面的兩行不可交換位置,否則失敗了也顯示成功。

:0

echo命令執(zhí)行成功!

Rem程序執(zhí)行完畢跳至標(biāo)題exit處退出

gotoexit

:1

echo命令執(zhí)行失??!

Rem程序執(zhí)行完畢跳至標(biāo)題exit處退出

gotoexit

:exit

pause

運行顯示:命令執(zhí)行成功!

⑵IF[NOT]stringl==string2command

string1和string2都為字符的數(shù)據(jù),英文內(nèi)字符的大小寫將看作不同,這個條件中的等于號

必須是兩個(絕對相等的意思)

條件相等后即執(zhí)行后面的command

檢測當(dāng)前變量的值做出判斷,為了防止字符串中含有空格,可用以下格式

if[NOT]{stringl}=={string2}command

if[NOT][stringl]=[string2]command

if[NOT]“stringl''=="string2"command

這種寫法實際上將括號或引號當(dāng)成字符串的一部分了,只要等號左右兩邊致就行了,比如

下面的寫法就不行:

if{stringl}==[string2]command

⑶IF[NOT]EXISTfilenamecommand

EXISTfilename為文件或目錄存在的意思

echooff

IFEXISTautoexec.batecho文件存在!

IFnotEXISTautoexec.batecho文件不存在!

這個批處理大家可以放在C盤和D盤分別執(zhí)行,看看效果

16、setlocal與變量延遲

本條內(nèi)容引用[英雄出品]的批處理教程:

要想進階,變量延遲是必過的一關(guān)!所以這一部分希望你能認真看。

為了更好的說明問題,我們先引入一個例子。

例1:

@echooff

seta=4

seta=5&echo%a%

pause

結(jié)果:4

解說:為什么是4而不是5呢?在echo之前明明已經(jīng)把變量a的值改成5了?

讓我們先了解一下批處理運行命令的機制:

批處理讀取命令時是按行讀取的(另外例如for命令等,其后用一對圓括號閉合的所有語句

也當(dāng)作一行),在

處理之前要完成必要的預(yù)處理工作,這其中就包括對該行命令中的變量賦值。我們現(xiàn)在分析

一下例1,批處理

在運行到這句"seta=5&echo%a%”之前,先把這一句整句讀取并做了預(yù)處理——對變量a

賦了值,那么%a%當(dāng)然就是4了!(沒有為什么,批處理就是這樣做的。)

而為了能夠感知環(huán)境變量的動態(tài)變化,批處理設(shè)計了變量延遲。簡單來說,在讀取了一條完

整的語句之后,不

立即對該行的變量賦值,而會在某個單條語句執(zhí)行之前再進行賦值,也就是說“延遲”了對變

量的賦值。

那么如何開啟變量延遲呢?變量延遲又需要注意什么呢?舉個例子說明一下:

例2:

@echooff

setlocalenablcdclayedexpansion

seta=4

seta=5&echo!a!

pause

結(jié)果:5

解說:啟動了變量延遲,得到了正確答案。變量延遲的啟動語句是“setlocal

cnablcdelayedexpansion^^,并且變量要用,一對嘆號”!!”括起來(注意要用英文的嘆號),否則

就沒有變量延遲的效果。

分析一下例2,首先“setlocalenabledelayedexpansion”開啟變量延遲,然后“seta=4”先給變量

a賦值為

4,“seta=5&echo!a!”這句是給變量a賦值為5并輸出(由于啟動了變量延遲,所以批處理

能夠感知到動態(tài)變化,即不是先給該行變量賦值,而是在運行過程中給變量賦值,因此此時

a的值就是5了)。

再舉一個例子鞏固一下。

例3:

@echooff

setlocalenablcdclayedexpansion

for/I%%iin(1,1,5)do(

seta=%%i

echo!a!

)

pause

結(jié)果:

1

2

3

4

5

解說:本例開啟了變量延遲并用“!!”將變量擴起來,因此得到我們預(yù)期的結(jié)果。如果不用變

量延遲會出現(xiàn)什

么結(jié)果呢?結(jié)果是這樣的:

ECHO處于關(guān)閉狀態(tài)。

ECHO處于關(guān)閉狀態(tài)。

ECHO處于關(guān)閉狀態(tài)。

ECHO處于關(guān)閉狀態(tài)。

ECHO處于關(guān)閉狀態(tài)。

即沒有感知到fbr語句中的動態(tài)變化。

第二節(jié)常用特殊符號

1、@命令行回顯屏蔽符

2、%批處理變量引導(dǎo)符

3、>重定向符

4、?重定向符

5、<、>&、<&重定向符

6、|命令管道符

7、八轉(zhuǎn)義字符

8、&組合命令

9、&&組合命令

10>||組合命令

11>""字符串界定符

12、,逗號

13、;分號

14、()括號

15、!感嘆號

16、批處理中可能會見到的其它特殊標(biāo)記符:(略)

CR(OD)命令行結(jié)束符

Escape(lB)ANSI轉(zhuǎn)義字符引導(dǎo)符

Space(20)常用的參數(shù)界定符

Tab(09);=不常用的參數(shù)界定符

+COPY命令文件連接符

*?文件通配符

/參數(shù)開關(guān)引導(dǎo)符

:批處理標(biāo)簽引導(dǎo)符

廢話少說,開講了

1、@命令行回顯屏蔽符

這個字符在批處理中的意思是關(guān)閉當(dāng)前行的回顯。我們從前兒課知道

ECHOOFF可以關(guān)閉掉整個批處理命令的回顯,但不能關(guān)掉ECHOOFF這個命令,現(xiàn)在我

們在ECHOOFF這個命令前加個@,就可以達到所有命令均不回顯的要求

2、%批處理變量引導(dǎo)符

這個百分號嚴(yán)格來說是算不上命令的,它只是批處理中的參數(shù)而已(多個%一起使用的情況

除外,以后還將詳細介紹)。

引用變量用%var%,調(diào)用程序外部參數(shù)用%1至%9等等

%0%1%2%3%4%5%6%7%8%9%*為命令行傳遞給批處理的參數(shù)

%0批處理文件本身,包括完整的路徑和擴展名

%1第一個參數(shù)

%9第九個參數(shù)

%*從第一個參數(shù)開始的所有參數(shù)

參數(shù)%0具有特殊的功能,可以調(diào)用批處理自身,以達到批處理本身循環(huán)的目的,也可以復(fù)

制文件自身等等。

例:最簡單的復(fù)制文件自身的方法

copy%0d:\wind.bat

3、>重定向符

輸出重定向命令

這個字符的意思是傳遞并且覆蓋,他所起的作用是將運行的結(jié)果傳遞到后面的范圍(后邊可

以是文件,也可以是默認的系統(tǒng)控制臺)

在NT系列命令行中,重定向的作用范圍由整個命令行轉(zhuǎn)變?yōu)閱蝹€命令語句,受到了命令分

隔符&,&&』和語句塊的制約限制。

比如:

使用命令:echohello>l.txt將建立文件l.txt,內(nèi)容為“hello"(注意行尾有一空格)

使用命令:echohelloA.txt將建立文件l.txt,內(nèi)容為“hello"(注意行尾沒有空格)4、?重

定向符

輸出重定向命令

這個符號的作用和,有點類似,但他們的區(qū)別是>>是傳遞并在文件的末尾追加,而〉是覆蓋

用法同上

同樣拿l.txt做例子

使用命令:

echohello>l.txt

echoworld?l.txt

這時候l.txt內(nèi)容如下:

hello

world

5、<、>&、<&重定向符

這三個命令也是管道命令,但它們一般不常用,你只需要知道一下就ok了,當(dāng)然如果想仔

細研究的話,可以自己查一下資料。(本人已查過,網(wǎng)上也查不到相關(guān)資料)

<,輸入重定向命令,從文件中讀入命令輸入,而不是從鍵盤中讀入。

@echooff

echo2005-05-01>temp.txt

date<temp.txt

deltemp.txt

這樣就可以不等待輸入直接修改當(dāng)前II期

>&.將一個句柄的輸出寫入到另一個句柄的輸入中。

<&,剛好和>&相反,從一個句柄讀取輸入并將其寫入到另一個句柄輸出中。

常用句柄:0、1、2,未定義句柄:3—9

l>nul表示禁止輸出正確的信息

2>nul表示禁止輸出錯誤信息。

其中的1與2都是代表某個數(shù)據(jù)流輸入輸出的地址(NTCMD稱之為句柄,MSDOS稱之為

設(shè)備)。

句柄0:標(biāo)準(zhǔn)輸入stdin,鍵盤輸入

句柄1:標(biāo)準(zhǔn)輸出stdout,輸出到命令提示符窗口(console,代碼為CON)

句柄2:標(biāo)準(zhǔn)錯誤stderr,輸出到命令提示符窗口(console,代碼為CON)

其中的stdin可被〈重定向,stdout可被〉、?重定向,而stderr在DOS下不可直接重定向,

只有通過ctty或其它命令將系統(tǒng)控制權(quán)轉(zhuǎn)交給其它設(shè)備的方式,來間接完成。

6、|命令管道符

格式:第一條命令|第二條命令[|第三條命令…]

將第一條命令的結(jié)果作為第二條命令的參數(shù)來使用,記得在unix中這種方式很常見。

例如:

dirc:\|find"txt"

以上命令是:查找C:'所有,并發(fā)現(xiàn)TXT字符串。

FIND的功能請用FIND/?自行查看

在不使format的自動格式化參數(shù)時,我是這樣來自動格式化A盤的

echoy|fbrmata:/s/q/v:system

用過fbrmat的都知道,再格盤時要輸入y來確認是否格盤,這個命令前加上echoy并用|字

符來將echoy的結(jié)果傳給fonnat命令

從而達到自動輸入y的目的

(這條命令有危害性,測試時請慎重)

7、八轉(zhuǎn)義字符

八是對特殊符號&的前導(dǎo)字符,在命令中他將以上3個符號的特殊功能去掉,僅僅只把他

們當(dāng)成符號而不使用他們的特殊意義。

比如

echotestA>1.txt

結(jié)果則是:test〉1.txt

他沒有追加在l.txt里,呵呵。只是顯示了出來

另外,此轉(zhuǎn)義字符還可以用作續(xù)行符號。

舉個簡單的例子:

@echooff

echo英雄八

是八

好A

男人

pause

不用多說,自己試一下就明白了。

8、&組合命令

語法:第一條命令&第二條命令[&第三條命令…]

&、&&、||為組合命令,顧名思義,就是可以把多個命令組合起來當(dāng)一個命令來執(zhí)行。這在

批處理腳本里是允許的,而且用的非常廣泛。因為批處理認行不認命令數(shù)目。

這個符號允許在一行中使用2個以上不同的命令,當(dāng)?shù)谝粋€命令執(zhí)行失敗了,也不影響后邊

的命令執(zhí)行。

這里&兩邊的命令是順序執(zhí)行的,從前往后執(zhí)行。

比如:

dirz:\&diry:\&dirc:\

以上命令會連續(xù)顯示z,y,c盤的內(nèi)容,不理會該盤是否存在

9,&&組合命令

語法:第一條命令&&第二條命令[&&第三條命令…]

用這種方法可以同時執(zhí)行多條命令,當(dāng)碰到執(zhí)行出錯的命令后將不執(zhí)行后面的命令,如果」

直沒有出錯則一直執(zhí)行完所有命令

這個命令和上邊的類似,但區(qū)別是,第一個命令失敗時,后邊的命令也不會執(zhí)行

dirz:\&&diry:\&&dirc:\

10、||組合命令

語法:第一條命令||第二條命令[||第三條命令…]

用這種方法可以同時執(zhí)行多條命令,當(dāng)一條命令失敗后才執(zhí)行第二條命令,當(dāng)碰到執(zhí)行正確

的命令后將不執(zhí)行后面的命令,如果沒有出現(xiàn)正確的命令則一直執(zhí)行完所有命令;

提示:組合命令和重定向命令一起使用必須注意優(yōu)先級

管道命令的優(yōu)先級高于重定向命令,重定向命令的優(yōu)先級高于組合命令

問題:把C盤和D盤的文件和文件夾列出到a.txt文件中。你將如何來搞定這道題?有朋友

說,這還不是很easy的問題嗎?同時執(zhí)行兩個dir,然后把得到的結(jié)果,到a.txt里就ok了嘛,

看例:

dirc:\&&dird:\>a.txt

仔細研究一下這句執(zhí)行后的結(jié)果,看看是否能達到題目的要求!錯了!這樣執(zhí)行后a.txt里

只有D盤的信息!為什么?就因為這里&&命令和>命令不能同時出現(xiàn)一個句子里(批處理

把一行看成一個句子)??!組合命令&&的優(yōu)先級沒有管道命令〉的優(yōu)先級高(自己總結(jié)的,

不妥的地方請指正)!所以這句在執(zhí)行時將本行分成這兩部分:dirc:\和dird:\>a.txt,而并

不是如你想的這兩部分:dirc:\&&dir&\和>a.txt。要使用組合命令&&達到題目的要求,必

須得這么寫:

dirc:\>a.txt&&dird:\?a.txt

這樣,依據(jù)優(yōu)先級高低,DOS將把這句話分成以下兩部分:dirc:\>a.txt和dird:\>>a.txt。

例十八中的幾句的差別比較特殊,值得好好研究體會一下。

當(dāng)然這里還可以利用&命令(自己想一下道理哦):

dirc:\>a.txt&dird:\?a.txt

IK""字符串界定符

雙引號允許在字符串中包含空格,進入一個特殊目錄可以用如下方法

cd"programfiles"

cdprogra-l

cdpro*

以上三種方法都可以進入programfiles這個H錄

12、,逗號

逗號相當(dāng)于空格,在某些情況下可以用來當(dāng)做空格使

比如

dir,c:\

13、;分號

分號,當(dāng)命令相同時、可以將不同目標(biāo)用;來隔離,但執(zhí)行效果不變,如執(zhí)行過程中發(fā)生錯

誤,則只返回錯誤報告,但程序仍會執(zhí)行。(有人說不會繼續(xù)執(zhí)行,其實測試一下就知道了)

比如:

dirc:\;d:\;e:\;z:\

以上命令相當(dāng)于

dirc:\

dird:\

dire:\

dirf:\

如果其中z盤不存在,運行顯示:系統(tǒng)找不到指定的路徑。然后終止命令的執(zhí)行。

例:dirc:\;d:\;e:\l.txt

以上命令相當(dāng)于

dirc:\

dird:\

dire:\l.txt

其中文件e:\l.txt不存在,但e盤存在,有錯誤提示,但命令仍會執(zhí)行。

為什么?如果目標(biāo)路徑不存在,則終止執(zhí)行;如果路徑存在,文件不存在,則繼續(xù)執(zhí)行。

就說這些了!各位有什么意見請回貼!有什么疑問請到BAT交流區(qū)發(fā)貼!下一節(jié)改進!

14、()括號

小括號在批處理編程中有特殊的作用,左右括號必須成對使用,括號中可以包括多行命令,

這些命令將被看成一個整體,視為一條命令行。

括號在for語句和if語句中常見,用來嵌套使用循環(huán)或條件語句,其實括號0也可以單獨使

用,請看例子。

例:

命令:echo1&echo2&echo3

可以寫成:

(

echo1

echo2

echo3

)

上面兩種寫法效果一樣,這兩種寫法都被視為是一條命令行。

注意:這種多條命令被視為一條命令行時,如果其中有變量,就涉及到變量延遲的問題。

15、!感嘆號

沒啥說的,在變量延遲問題中,用來表示變量,即%var%應(yīng)該表示為!var!,請看前面的setlocal

命令介紹。

顧名思義,批處理就是把一批或者說是一條條命令放在一個文本里,然后批量執(zhí)行!執(zhí)行這

一批命令的文件的擴展名是BAT或者CMD,把任何一批命令放入在有這樣擴展名的文件里,

執(zhí)行時里面的命令就會??條條的執(zhí)行完,當(dāng)然

我們還可以在其中加入一些邏輯判斷的語句,讓里面的命令在滿足一定條件時執(zhí)行指定的命

令.

了解了大概意思后,我們正式開始學(xué)習(xí).先看一個簡單的例子!

@echooff

echo"歡迎來到非常BAT!"

pause

把上面的3條命令保存為test.bat或者test.cmd然后執(zhí)行,他就會在屏幕上顯示二行話:"歡迎

來到非常BAT!請按任意鍵繼續(xù)..

這就是一個簡單批處理文件了,我們來分析一下.

這個批處理文件一共就用了2條命令"echo"和"pause"還有一個特殊符號"@"

@符號在批處理中的作用是關(guān)閉當(dāng)前行命令的回顯,也就是不顯示執(zhí)行的是什么命令,只顯示

命令的結(jié)果!

你可以執(zhí)行下面這個批處理文件來理解,保存為*.bat或者*CMD

@echo你好

echo你好

@pause

echo命令的作用有兩個,一個是在CMD上回顯一行內(nèi)容.如:echo"歡迎來到非常BAT!",還一

個是關(guān)閉命令的回顯:echooff

echooff的作用就相當(dāng)于在每條命令前面加一個@符號,這樣所有的命令將只會顯示結(jié)果不

顯示命令.

我們在echo。汗這命令前加一個@符號是為了不讓echooff這條命令本身顯示出來,讓批處理

更完美!

pause命令就是暫停的意思,防止批處理執(zhí)行完后直接退出!執(zhí)行pause命令后會自動在CMD

里顯示"請按任意鍵繼續(xù)..."這樣一行話!

從上面這個簡單的批處理中,我們可以發(fā)現(xiàn)其實批處理就是運用一些含有特殊意義的符號和

一些完成指定功能的命令組合而成,那么

在批處理中有多少這樣的特殊符號和功能命令呢?我們現(xiàn)在就來仔細了解一下一些最常用的!

(以下內(nèi)容來源網(wǎng)絡(luò),請各位仔細閱讀,好進入下節(jié)的實例說明)

批處理的常見命令

REM

ECHO

GOTO

CALL

PAUSE

IF

還有(FOR,SETLOCAL,SHIFT)這兒個命令比較難,不適合寫在基礎(chǔ)篇,以后說明!

批處理定義:顧名思義,批處理文件是將一系列命令按一定的順序集合為一個可執(zhí)行的文本

文件,其擴展名為BAT。

這些命令統(tǒng)稱批處理命令。

介紹命令

1、REM

REM是個注釋命令,?般用來給程序加上注解,該命令后的內(nèi)容在程序執(zhí)行時,將不會被

顯示和執(zhí)行。

例:REM這個命令就是注釋

這一句將不會被執(zhí)行

2,ECHO

ECHO是一個回顯命令,主要參數(shù)有OFF和ON。一般用ECHOMESSAGE來顯示一個特

定的消息。

例:

Echooff

Rem以上代表關(guān)閉回顯(就是不顯示所執(zhí)行的命令)

Echo這個就是消息(message)

Rem以上代表顯示“這就是消息(message)”這列字符

咱們來看看執(zhí)行結(jié)果:

3、GOTO

GOTO會點編程的朋友就會知道這是跳轉(zhuǎn)的意思。

在批處理中允許以“:XXX”來構(gòu)建―個標(biāo)號,然后用GOTOXXX直接來執(zhí)行標(biāo)號后的命令。

例:

:lable

REM上面就是名為LABEL的標(biāo)號

DIRC:\

DIRD:\

GOTOtable

REM以上程序跳轉(zhuǎn)標(biāo)號LABEL處繼續(xù)執(zhí)行

咱們來看看結(jié)果:

4、CALL

CALL命令可以在批處理執(zhí)行過程中調(diào)用另一個批處理,當(dāng)另一個批處理執(zhí)行完后,再繼續(xù)

執(zhí)行原來的批處理

例:

創(chuàng)建一個2.BAT,內(nèi)容如下

ECHO這就是2的內(nèi)容

創(chuàng)建一個1.BAT,內(nèi)容如下

ECHO這是1的內(nèi)容

CALL2.BAT

ECHO1和2的內(nèi)容全部顯示完成。

執(zhí)行1.BAT,來看看結(jié)果:

5、PAUSE

PAUSE,玩游戲的人都知道,暫停的意思

在這里就是停止系統(tǒng)命令的執(zhí)行并顯示下面的內(nèi)容。

例:

PAUSE

6、IF

IF條件判斷語句,語法格式如下:

IF[NOT]ERRORLEVELnumbercommand

IF[NOT]stringl==string2command

IF[NOT]EXISTfilenamecommand

解釋下:

[NOT]:將返回結(jié)果取反值,就是“如果沒有”的意思

ERRORLEVEL:

是命令執(zhí)行完成后返回的退出值

Number:

退出值的數(shù)字取值范圍0~255,判斷時值的排列順序應(yīng)該由大到小。返回的值大于等于指定

的值時,條件成立

stringl==string2:

stringl和string2都為字符的數(shù)據(jù),英文內(nèi)字符的大小寫將看作不同,這個條件中的等于號

必須是兩個(絕對相等的意思)

條件相等后即執(zhí)行后面的command

EXISTfilename:

為文件或目錄存在的意思

IFERRORLEVEL這個句子必須放在某?個命令的后面,執(zhí)行命令后由IFERRORLEVEL

來判斷命令的返回值。

例:

(1)

IF[NOT]ERRORLEVELnumbercommand

檢測命令執(zhí)行完后的返回值做出判斷

echooff

dirz:

rem如果退出代碼為1(不成功)就跳至標(biāo)題1處執(zhí)行

IFERRORLEVEL1goto1

REM如果退出代碼為0(成功)就跳至標(biāo)題0處執(zhí)行

IFERRORLEVEL0goto0

:0

echo命令執(zhí)行成功!

Rem程序執(zhí)行完畢跳至標(biāo)題exit處退出

gotoexit

echo命令執(zhí)行失?。?/p>

Rem程序執(zhí)行完畢跳至標(biāo)題exit處退出

gotoexit

:exit

Rem這里是程序的出口

(2)IFstringl=string2command

檢測當(dāng)前變量的值做出判斷

ECHOOFF

IF1==2gotono

Echo變量相等!

gotoexit

:no

echo變量不相等

gotoexit

:exit

看看效果,敲擊這個命令Lbat數(shù)字

(3)IF[NOT]EXISTfilenamecommand

發(fā)現(xiàn)特定的文件做出判斷

echooff

IFnotEXISTautoexec.batgoto1

echo文件存在成功!

gotoexit

:1

echo文件不存在失??!

gotoexit

:exit

這個批處理大家可以放在C盤和D盤分別執(zhí)行,看看效果

特殊符號:

1.@

2.>

3.>>

4.1

5.A

6.&

7.&&

8.""

9.,

10.;

廢話少說,開講了

一、@

這個字符在批處理中的意思是關(guān)閉當(dāng)前行的回顯。我們從前幾課知道

ECHOOFF可以關(guān)閉掉整個批處理命令的回顯,但不能關(guān)掉ECHOOFF這個命令,現(xiàn)在我

們在ECHOOFF這個命令前加個@,就可以達到所

有命令均不回顯的要求

l.bat

echooff

dird:\

2.bat

@echooff

dird:\

二、>;

這個字符的意思是傳遞并且覆蓋,他所起的作用是將運行的回顯結(jié)果傳遞到后面的范圍(后

邊可以是文件,也可以是默認的系統(tǒng)控

制臺)

比如:

文件l.txt的文件內(nèi)容是:

1+1

使用命令:dir*.txt>l.txt

這時候l.txt內(nèi)容如下

驅(qū)動器C中的卷沒有標(biāo)簽。

卷的序列號是3827-1BDD

C:\的目錄

2004-05-2500:5717,755,907Log.txt

2004-05-2615:213l.txt

2004-05-2615:2102.txt

3個文件17,755,910字節(jié)

0個目錄339,111,936可用字節(jié)

三、>>

這個符號的作用和>有點類似,但他們的區(qū)別是>>是傳遞并在文件的末尾追加,而

>是覆蓋

用法同上

同樣拿l.txt做例子

內(nèi)容是1+1

使用命令:dir*.txt>>l.txt

咱們來看看顯示的結(jié)果如何

四、|

這是一個管道傳輸命令,意思是將上一命令執(zhí)行的結(jié)果傳到下一個命令去處理

例如:

dirc:\|find"txt"

以匕命令是:查找C:\所有,并發(fā)現(xiàn)TXT字符串。

FIND的功能請用FIND/?自行查看

在不使fonnat的自動格式化參數(shù)時,我是這樣來自動格式化A盤的

echoy|fbrmata:/s/q/v:system

用過format的都知道,再格盤時要輸入y來確認是否格盤,這個命令前加上echoy并用|字

符來將echoy的結(jié)果傳給format命令

從而達到自動輸入y的目的

(這條命令有危害性,測試時請慎重)

五、八

人是對特殊符號的前導(dǎo)字符,在命令中他將以上3個符號的特殊功能去掉,

僅僅只把他們當(dāng)成符號而不使用他們的特殊意

義。

比如

echotestA>l.txt

結(jié)果則是

他沒有追加在l.txt里,呵呵。只是顯示了出來

六、&

這個符號允許在一行中使用2個以上不同的命令,當(dāng)?shù)谝粋€命令執(zhí)行失敗了,也不影響后邊

的命令執(zhí)行。

比如:

dirz:\&diry:\&dirc:\

以上命令會連續(xù)顯示z,y,c盤的內(nèi)容,不理會該盤是否存在

七、&&

這個命令和上邊的類似,但區(qū)別是,第一個命令失敗時、后邊的命令也不會執(zhí)行

dirz:\&&diry:\&&dirc:\

八、""

雙引號允許在字符串中包含空格,進入一個特殊目錄可以用如下方法

cd"programfiles"

cdprogra-1

cdpro*

以上三種方法都可以進入programfiles這個目錄

九、,

逗號相當(dāng)于空格,在某些情況卜一“,”可以用來當(dāng)做空格使

比如

dir,c:\

十、;

分號,當(dāng)命令相同時,可以將不同目標(biāo)用;來隔離,但執(zhí)行效果不變,如執(zhí)行過程中發(fā)生錯

誤,則只返回錯誤報告,但程序還是會

執(zhí)行。

比如:

dirc:\;d:\e:\;f:\

以上命令相當(dāng)于

dirc:\

dird:\

dire:\

dirf:\

看了看第一節(jié)的東西,發(fā)現(xiàn)那些簡單的命令都有詳細解釋,實在想不出什么更好的東西來解釋

他們,就直接來一個"FOR命令詳解"在其中運用這些東西來解釋吧!

講FOR之前呢,咋先告訴各位新手朋友,如果你有什么命令不懂,直接在CMD下面輸入:

name/?這樣的格式來看系統(tǒng)給出的幫助文件,比如for/?就會把FOR命令的幫助全部顯示出

來!當(dāng)然許多菜鳥同志都看不懂?…所以才會有那么多批處理文章!!!!俺也照顧菜鳥,把FOR命

令用我自己的方式說明下!

正式開始:

FOR這條命令基本上都被用來處理文本,我們這次除了要說他處理文本的作用外還要講他的

其他一些好用的功能!

看看他的基本格式(這里我引用的是批處理中的格式,直接在命令行只需要一個%號)

FOR參數(shù)%%變量名IN(相關(guān)文件或命令)DO執(zhí)行的命令

參數(shù):FOR有4個參數(shù)/d/I/r/f他們的作用我在下面用例子解釋

%%變量名:這個變量名可以是小寫a-z或者大寫A-Z,他們區(qū)分大小寫哦?

FOR會把每個讀取到的值給他!

IN:命令的格式,照寫就是了!

(相關(guān)文件或命令):FOR要把什么東西讀取然后賦值給變量,不懂的話看下面的例子

do:命令的格式,照寫就是了!

執(zhí)行的命令:對每個變量的值要執(zhí)行什么操作就寫在這.

看不懂我的這些說明,可以在CMD輸入fbr/?看系統(tǒng)提供的幫助!我這里也給出來吧,大家對

八昭、、

FOR%%variableIN(set)DOcommand[command-parameters]

%%variable指定一個單一字母可替換的參數(shù)。

(set)指定一個或一組文件??梢允褂猛ㄅ浞?/p>

command指定對每個文件執(zhí)行的命令。

command-parameters

為特定命令指定參數(shù)或命令行開關(guān)。

現(xiàn)在開始講每個參數(shù)的意思

/d

僅為目錄

如果Set(也就是我上面寫的”相關(guān)文件或命令")包含通配符(*和?),將對與Set相匹配的每

個目錄(而不是指定目錄中的文件組)執(zhí)行指定的Command。

這個參數(shù)其實我也沒弄太懂…有錯誤希望各位糾正!

系統(tǒng)幫助的格式:FOR/D%%variableIN(set)DOcommand

他主要用于目錄搜索,不會搜索文件,看這樣的例子

@echooff

fbr/d%%iin(*)do@echo%%i

pause

把他保存放在C盤根目錄執(zhí)行,就會把C盤目錄下的全部目錄名字打印出來,而文件名字一個

也不顯示!

在來一個,比如我們要把當(dāng)前路徑下文件夾的名字只有1-3個字母的打出來

@echooff

fbr/d%%iin(???)do@echo%%i

pause

這樣的話如果你當(dāng)前目錄下有目錄名字只有1-3個字母的,就會顯示出來,沒有就不顯示了

這里解釋下*號和?號的作用,*號表示任意N個字符,而?號只表示任意一個字符

知道作用了,給大家個思考題目!

@echooff

for/d%%iin(window?)do@echo%%i

pause

保存到C盤下執(zhí)行,會顯示什么呢?自己看吧!

/D參數(shù)只能顯示當(dāng)前目錄下的目錄名字,這個大家要注意!

/R

遞歸

進入根目錄樹[Drive:]Path,在樹的每個目錄中執(zhí)行fbr語句。如果在/R后沒有指定目錄,則

認為是當(dāng)前目錄。如果Set只是一個句點(.),則只枚舉目錄樹。

系統(tǒng)幫助的格式:FOR/R[[drive:]path]%%variableIN(set)DOcommand

上面我們知道,/D只能顯示當(dāng)前路徑下的目錄名字,那么現(xiàn)在這個/R也是和目錄有關(guān),他能干

嘛呢?放心他比/D強大多了!

他可以把當(dāng)前或者你指定路徑下的文件名字全部讀取,注意是文件名字,有什么用看例子!

@echooff

for/rc:\%%iin(*.exe)do@echo%%i

pause

咋們把這個BAT保存到D盤隨便哪里然后執(zhí)行,我會就會看到,他把C盤根目錄,和每個目錄

的子目錄下面全部的EXE文件都列出來了!!!!

再來一個

@echooff

for/r%%iin(*.exe)do@echo%%i

pause

參數(shù)不一樣了吧!這個命令前面沒加那個C:\也就是搜索路徑,這樣他就會以當(dāng)前目錄為搜索

路徑,比如你這個BAT你把他防災(zāi)d:\test目錄下執(zhí)行,那么他就會把D:\test目錄和他卜面的子

目錄的全部EXE文件列出來!!!

這個參數(shù)大家因該理解了吧!還是滿好玩的命令!

/L

迭代數(shù)值范圍

使用迭代變量設(shè)置起始值(Start#),然后逐步執(zhí)行一組范圍的值,直到該值超過所設(shè)置的終止

值(End#)。/L將通過對Start#與End#進行比較來執(zhí)行迭代變量。如果Start#小于End#,就會

執(zhí)行該命令。如果迭代變量超過End#,則命令解釋程序退出此循環(huán)。還可以使用負的Step#

以遞減數(shù)值的方式逐步執(zhí)行此范圍內(nèi)的值。例如,(1,1,5)生成序歹U12345,而(5,-1,1)則生

成序列(54321)(>語法是:

系統(tǒng)幫助的格式:fbr/L%%Variablein(Start#,Step#,End#)doCommand

看著這說明有點暈吧!咋們看例子就不暈了!

@echooff

for/I%%iin(1,1,5)do@echo%%i

pause

保存執(zhí)行看效果,他會打印從12345這樣5個數(shù)字

(1,1,5)這個參數(shù)也就是表示從1開始每次加1直到5終止!

大會暈,就打印個數(shù)字有P用...好的滿足大家,看這個例子

@echooff

for/I%%iin(1,1,5)dostartcmd

pause

執(zhí)行后是不是嚇了一跳,怎么多了5個CMD窗口,呵呵!如果把那個(1,1,5)改成(1,1,65535)會有

什么結(jié)果,我先告訴大家,會打開65535個CMD窗口….這么多你不死機算你強!

當(dāng)然我們也可以把那個startcmd改成md%%i這樣就會建立指定個目錄了!!!名字為1-65535

看完這個被我賦予破壞性質(zhì)的參數(shù)后,我們來看最后一個參數(shù)

/f

'迭代及文件解析

使用文件解析來處理命令輸出、字符串及文件內(nèi)容。使用迭代變量定義要檢查的內(nèi)容或字符

串,并使用各種ParsingKeywords選項進一步修改解析方式。使用ParsingKeywords令牌選

項指定哪些令牌應(yīng)該作為迭代變量傳遞。請注意:在沒有使用令牌選項時:/F將只檢查第

一個令牌。

文件解析過程包括讀取輸出、字符串或文件內(nèi)容,將其分成獨立的文本行以及再將暫行解析

成零個或更多個令牌。然后通過設(shè)置為令牌的迭代變量值,調(diào)用fbr循環(huán)。默認情況下,/F

傳遞每個文件每一行的第一個空白分隔符號。跳過空行。

系統(tǒng)幫助的格式:

for/F"ParsingKeywords"%%Variablein(FileNameSet)doCommand

有沒有發(fā)現(xiàn)這個參數(shù)說明比上面幾個都多…沒辦法,人們用FOR命令主要也就是用/f參

數(shù),FOR的主場啊!大家得好好看!

先來解釋下那個多出來的"ParsingKeywords"

他表示4個參數(shù)

eol=c-指個行注釋字符的結(jié)尾(就一個)

skip=n-指在文件開始時忽略的行數(shù)。

delims=xxx-指分隔符集。這個替換了空格和跳格鍵的

默認分隔符集。

tokcns=x,y,m-n-指每行的哪一-個符號被傳遞到每個迭代

的for本身。這會導(dǎo)致額外變量名稱的分配。m-n

格式為一個范圍。通過nth符號指定mth。如果

符號字符串中的最后一個字符星號,

那么額外的變量將在最后一個符號解析之后

分配并接受行的保留文本。

usebackq-指定新語法已在下類情況中使用:

在作為命令執(zhí)行一個后引號的字符串并且一個單

引號字符為文字字符串命令并允許在filenameset

中使用雙引號擴起文件名稱。

先別暈了!我這就舉個例子幫助大家來理解這些參數(shù)!

usebackq這個參數(shù)不用理解了,系統(tǒng)默認會給我們加上!

為了能使用這個例子,我們先新建一個文本文件,在里面打上這些內(nèi)容保存為testtxt:

;郁悶啊!

您好!歡迎來到,非常批處理

我們的網(wǎng)站

完畢!

@echooff

FOR/F"eol=;tokens=ldclims="%%iin(test.txt)do@echo%%i

pause

我們把這個BAT保存到和你的test.txt相同的目錄下面然后執(zhí)行

我們會看到屏幕上會顯示

您好!

我們的網(wǎng)站

完畢!

為什么會這樣?我來解釋

這個命令會讀取在當(dāng)前目錄下名為test.txt文件中的內(nèi)容,將每一行的內(nèi)容賦值給變量%%i,忽

略掉以;號開頭的行,并且以空格做為分隔符號,打印每行以空格做分隔符號的第一列

結(jié)果就是這樣了!!

如果改成

當(dāng)然我們想要把全部文件內(nèi)容直接打印出來就可以這樣

@echooff

FOR/F"delims="%%iin(test.txt)do@echo%%i

pause

另外/F參數(shù)還可以以輸出命令的結(jié)果看這個例子

@echooff

FOR/F"delims="%%iin('netuser')do@echo%%i

pause

這樣你本機全部帳號名字就出來了把擴號內(nèi)的內(nèi)容用兩個單引號引起來就表示那個當(dāng)命令

執(zhí)行,FOR會返回命令的每行結(jié)果,加那個“delims="是為了讓我空格的行能整行顯示出來,不

加就只顯示空格左邊一列!

基本上講完了FOR的基本用法了…如果你看過FOR的系統(tǒng)幫助,你會發(fā)現(xiàn)他下面還有一些特

定義的變量,這些我先不講.大家因該都累了吧!你不累我累啊….

本節(jié)到此結(jié)速,希望對各位有所幫助!

FOR命令中有一些變量,他們的用法許多新手朋友還不太了解,今天給大家講解他們的用法!

先把FOR的變量全部列出來:

T-刪除任何引號("),擴展%I

%~fl-將%I擴展到一個完全合格的路徑名

%~dl-僅將%I擴展到一個驅(qū)動器號

%~pl-僅將%I擴展到一個路徑

%~nl-僅將%I擴展到一個文件名

%~xl-僅將%I擴展到一個文件擴展名

%~sl-擴展的路徑只含有短名

%~al-將%I擴展到文件的文件屬性

%~tl-將%1擴展到文件的日期/時間

%-zl-將%I擴展到文件的大小

%~$PATH:I-查找列在路徑環(huán)境變量的目錄,并將%I擴展

到找到的第一個完全合格的名稱。如果環(huán)境變量名

未被定義,或者沒有找到文件,此組合鍵會擴展到

空字符串

我們可以看到每行都有一個大寫字母T,這個I其實就是我們在FOR帶入的變量,我們FOR

語句代入的變量名是什么,這里就寫什么.

比如:FOR/F%%zIN('set')DO@echo%%z

這里我們代入的變量名是z那么我們就要把那個I改成z,例如%改為%-也

至于前面的%?p這樣的內(nèi)容就是語法了!

好開始講解:

~1-刪除任何引號("),擴展%I

這個變量的作用就如他的說明,刪除引號!

我們來看這個例子:

首先我們在桌面建立一個名字為temp.txt文本文件,在里面輸入這些內(nèi)容

"1111

2222"

"3333"

44"44

然后在建立個BAT文件代碼如下:

FOR/F"delims="%%iIN(temp.txt)DO@echo%%-i

pause

執(zhí)行后,我們看CMD的回顯如下:

1111

2222"

3333

44"44

和之前temp.txt中的內(nèi)容對比一下,我們會發(fā)現(xiàn)第一行和第三行的引號都消失了,這就是刪除

引號?i的作用了!

刪除引號規(guī)則如下(BAT兄補充!)

1、若字符串首尾同時存在引號,則刪除首尾的引號;

2、若字符串尾不存在引號,則刪除字符串首的引號;

3、如果字符串中間存

溫馨提示

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

評論

0/150

提交評論