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

下載本文檔

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

文檔簡介

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

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

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

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

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

@echooff

echo"歡迎來到非常BAT!"

pause

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

他就會(huì)在屏幕上顯示以下二行話:

歡迎來到非常BAT!

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

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

有一個(gè)特殊符號(hào)"@"

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

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

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

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

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

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的注釋作用,而且更簡潔有效;但有兩點(diǎn)需要注意:

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

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

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

釋作用,所以::常被用作注釋符號(hào),其實(shí):+也可起注釋作用。

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

顯狀態(tài),因?yàn)槊罱忉屍鞑徽J(rèn)為他是一個(gè)有效的命令行,就此點(diǎn)來看,rem在某些場合下將

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

2、ECHO和@

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

置。

@字符放在命令前將關(guān)閉該命令回顯,無論此時(shí)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來顯示一個(gè)特定的消息。

例:

@Echooff

Echohello

Pause

運(yùn)行顯示:hello

3、PAUSE

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

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

例:

PAUSE

運(yùn)行顯示:

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

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

Echo其他提示語&pause>nul

4、errorlevel

程序返回碼

echo%errorlevel%

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

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

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

5、title

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

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

6、COLOR

設(shè)置默認(rèn)的控制臺(tái)前景和背景顏色。

COLOR[attr]

attr指定控制臺(tái)輸出的顏色屬性

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

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

0=黑色8=灰色

1=藍(lán)色9=淡藍(lán)色

2=綠色A=淡綠色

3=湖藍(lán)色8=淡淺綠色

4=紅色C=淡紅色

5=紫色D=淡紫色

6=黃色E=淡黃色

7=白色F=亮白色

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

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

DefaultColor注冊表值。

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

會(huì)將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會(huì)點(diǎn)編程的朋友就會(huì)知道這是跳轉(zhuǎn)的意思。

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

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

例:

if{%1}={}gotonoparms

if"%2"=""gotonoparms

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

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

別人看起來才會(huì)理解你的意圖啊。

例:

@echooff

:start

set/avar+=l

echo%var%

if%var%leq3GOTOstart

pause

運(yùn)行顯示:

1

2

3

4

9、find

在文件中搜索字符串。

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

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

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

/N顯示行號(hào)。

/I搜索字符串時(shí)忽略大小寫。

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

"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

運(yùn)行顯示如下:

-------TEST.TXT

111

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

例:

@echooff

echo111>test.txt

echo222?test.txt

typetest.txt|find"11ln

deltest.txt

pause

運(yùn)行顯示如下:

111

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

10、start命令

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

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

下的指令

例:startexplorerd:\

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

11>assoc和ftype

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

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

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

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

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

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

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

assoc#顯示所有'文件擴(kuò)展名'關(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)被破壞,可以運(yùn)行,再輸入這條命令

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)前目錄名不確定時(shí),會(huì)有點(diǎn)幫助。(dos編程中很有用)

13、CALL

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

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

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

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

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)的替代已被增強(qiáng)。您可以使用以下語法:(看不明白的直接運(yùn)行后面的例子)

%~1-刪除引號(hào)("),擴(kuò)充%1

%~fl-將%1擴(kuò)充到一個(gè)完全合格的路徑名

%~dl-僅將%1擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)

%~pl-僅將%1擴(kuò)充到一個(gè)路徑

%~nl-僅將%1擴(kuò)充到一個(gè)文件名

%~xl-僅將%1擴(kuò)充到一個(gè)文件擴(kuò)展名

%~sl-擴(kuò)充的路徑指含有短名

%~al-將%1擴(kuò)充到文件屬性

%~tl-將%1擴(kuò)充到文件的日期/時(shí)間

%~zl-將%1擴(kuò)充到文件的大小

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

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

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

擴(kuò)充到空字符串

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

%~dpl-只將%1擴(kuò)展到驅(qū)動(dòng)器號(hào)和路徑

%~nxl-只將%1擴(kuò)展到文件名和擴(kuò)展名

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

并擴(kuò)展到找到的第一個(gè)文件的驅(qū)動(dòng)器號(hào)和路徑。

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

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

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

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

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

例:

@echooff

Echo產(chǎn)生一個(gè)臨時(shí)文件>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刪除引號(hào):31

Echo擴(kuò)充到路徑:%~fl

Echo擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào):%-dl

Echo擴(kuò)充到一個(gè)路徑:%~pl

氏ho擴(kuò)充到一個(gè)文件名:%~nl

Echo擴(kuò)充到一個(gè)文件擴(kuò)展名:%~xl

Echo擴(kuò)充的路徑指含有短名:%~sl

Echo擴(kuò)充到文件屬性:%~al

Echo擴(kuò)充到文件的日期/時(shí)間:%~tl

Echo擴(kuò)充到文件的大小:%~zl

Echo擴(kuò)展到驅(qū)動(dòng)器號(hào)和路徑:%~dpl

Echo擴(kuò)展到文件名和擴(kuò)展名:%~nxl

Echo擴(kuò)展到類似DIR的輸出行:

Echo.

Goto:eof

14、shift

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

SHIFT[/n]

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

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

SHIFT/2

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

15、IF

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

IF[NOT]ERRORLEVELnumbercommand

IF[NOT]stringl=string2command

IF[NOT]EXISTfilenamecommand

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

(1)IF[NOT]ERRORLEVELnumbercommand

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

判斷命令的返回值。

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

定的值時(shí),條件成立

例:

@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

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

⑵IF[NOT]stringl==string2command

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

必須是兩個(gè)(絕對(duì)相等的意思)

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

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

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

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

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

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

下面的寫法就不行:

if{stringl}==[string2]command

⑶IF[NOT]EXISTfilenamecommand

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

echooff

IFEXISTautoexec.batecho文件存在!

IFnotEXISTautoexec.batecho文件不存在!

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

16、setlocal與變量延遲

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

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

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

例1:

@echooff

seta=4

seta=5&echo%a%

pause

結(jié)果:4

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

讓我們先了解一下批處理運(yùn)行命令的機(jī)制:

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

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

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

一下例1,批處理

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

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

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

整的語句之后,不

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

量的賦值。

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

例2:

@echooff

setlocalenablcdclayedexpansion

seta=4

seta=5&echo!a!

pause

結(jié)果:5

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

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

就沒有變量延遲的效果。

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

a賦值為

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

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

a的值就是5了)。

再舉一個(gè)例子鞏固一下。

例3:

@echooff

setlocalenablcdclayedexpansion

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

seta=%%i

echo!a!

)

pause

結(jié)果:

1

2

3

4

5

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

量延遲會(huì)出現(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語句中的動(dòng)態(tài)變化。

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

1、@命令行回顯屏蔽符

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

3、>重定向符

4、?重定向符

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

6、|命令管道符

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

8、&組合命令

9、&&組合命令

10>||組合命令

11>""字符串界定符

12、,逗號(hào)

13、;分號(hào)

14、()括號(hào)

15、!感嘆號(hào)

16、批處理中可能會(huì)見到的其它特殊標(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、@命令行回顯屏蔽符

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

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

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

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

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

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

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

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

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

%1第一個(gè)參數(shù)

%9第九個(gè)參數(shù)

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

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

制文件自身等等。

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

copy%0d:\wind.bat

3、>重定向符

輸出重定向命令

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

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

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

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

比如:

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

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

定向符

輸出重定向命令

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

用法同上

同樣拿l.txt做例子

使用命令:

echohello>l.txt

echoworld?l.txt

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

hello

world

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

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

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

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

@echooff

echo2005-05-01>temp.txt

date<temp.txt

deltemp.txt

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

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

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

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

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

2>nul表示禁止輸出錯(cuò)誤信息。

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

設(shè)備)。

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

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

句柄2:標(biāo)準(zhǔn)錯(cuò)誤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的功能請(qǐng)用FIND/?自行查看

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

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

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

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

從而達(dá)到自動(dòng)輸入y的目的

(這條命令有危害性,測試時(shí)請(qǐng)慎重)

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

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

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

比如

echotestA>1.txt

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

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

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

舉個(gè)簡單的例子:

@echooff

echo英雄八

是八

好A

男人

pause

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

8、&組合命令

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

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

批處理腳本里是允許的,而且用的非常廣泛。因?yàn)榕幚碚J(rèn)行不認(rèn)命令數(shù)目。

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

的命令執(zhí)行。

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

比如:

dirz:\&diry:\&dirc:\

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

9,&&組合命令

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

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

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

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

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

10、||組合命令

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

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

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

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

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

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

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

看例:

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

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

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

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

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

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

須得這么寫:

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

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

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

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

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

IK""字符串界定符

雙引號(hào)允許在字符串中包含空格,進(jìn)入一個(gè)特殊目錄可以用如下方法

cd"programfiles"

cdprogra-l

cdpro*

以上三種方法都可以進(jìn)入programfiles這個(gè)H錄

12、,逗號(hào)

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

比如

dir,c:\

13、;分號(hào)

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

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

比如:

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

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

dirc:\

dird:\

dire:\

dirf:\

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

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

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

dirc:\

dird:\

dire:\l.txt

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

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

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

14、()括號(hào)

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

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

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

用,請(qǐng)看例子。

例:

命令:echo1&echo2&echo3

可以寫成:

(

echo1

echo2

echo3

)

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

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

15、!感嘆號(hào)

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

命令介紹。

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

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

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

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

令.

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

@echooff

echo"歡迎來到非常BAT!"

pause

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

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

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

這個(gè)批處理文件一共就用了2條命令"echo"和"pause"還有一個(gè)特殊符號(hào)"@"

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

命令的結(jié)果!

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

@echo你好

echo你好

@pause

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

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

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

顯示命令.

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

更完美!

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

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

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

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

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

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

批處理的常見命令

REM

ECHO

GOTO

CALL

PAUSE

IF

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

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

文件,其擴(kuò)展名為BAT。

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

介紹命令

1、REM

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

顯示和執(zhí)行。

例:REM這個(gè)命令就是注釋

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

2,ECHO

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

定的消息。

例:

Echooff

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

Echo這個(gè)就是消息(message)

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

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

3、GOTO

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

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

例:

:lable

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

DIRC:\

DIRD:\

GOTOtable

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

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

4、CALL

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

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

例:

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

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

創(chuàng)建一個(gè)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,判斷時(shí)值的排列順序應(yīng)該由大到小。返回的值大于等于指定

的值時(shí),條件成立

stringl==string2:

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

必須是兩個(gè)(絕對(duì)相等的意思)

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

EXISTfilename:

為文件或目錄存在的意思

IFERRORLEVEL這個(gè)句子必須放在某?個(gè)命令的后面,執(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

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

(3)IF[NOT]EXISTfilenamecommand

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

echooff

IFnotEXISTautoexec.batgoto1

echo文件存在成功!

gotoexit

:1

echo文件不存在失??!

gotoexit

:exit

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

特殊符號(hào):

1.@

2.>

3.>>

4.1

5.A

6.&

7.&&

8.""

9.,

10.;

廢話少說,開講了

一、@

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

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

們在ECHOOFF這個(gè)命令前加個(gè)@,就可以達(dá)到所

有命令均不回顯的要求

l.bat

echooff

dird:\

2.bat

@echooff

dird:\

二、>;

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

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

制臺(tái))

比如:

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

1+1

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

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

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

卷的序列號(hào)是3827-1BDD

C:\的目錄

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

2004-05-2615:213l.txt

2004-05-2615:2102.txt

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

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

三、>>

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

>是覆蓋

用法同上

同樣拿l.txt做例子

內(nèi)容是1+1

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

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

四、|

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

例如:

dirc:\|find"txt"

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

FIND的功能請(qǐng)用FIND/?自行查看

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

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

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

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

從而達(dá)到自動(dòng)輸入y的目的

(這條命令有危害性,測試時(shí)請(qǐng)慎重)

五、八

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

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

義。

比如

echotestA>l.txt

結(jié)果則是

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

六、&

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

的命令執(zhí)行。

比如:

dirz:\&diry:\&dirc:\

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

七、&&

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

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

八、""

雙引號(hào)允許在字符串中包含空格,進(jìn)入一個(gè)特殊目錄可以用如下方法

cd"programfiles"

cdprogra-1

cdpro*

以上三種方法都可以進(jìn)入programfiles這個(gè)目錄

九、,

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

比如

dir,c:\

十、;

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

誤,則只返回錯(cuò)誤報(bào)告,但程序還是會(huì)

執(zhí)行。

比如:

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

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

dirc:\

dird:\

dire:\

dirf:\

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

他們,就直接來一個(gè)"FOR命令詳解"在其中運(yùn)用這些東西來解釋吧!

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

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

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

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

正式開始:

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

其他一些好用的功能!

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

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

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

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

FOR會(huì)把每個(gè)讀取到的值給他!

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

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

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

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

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

八昭、、

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

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

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

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

command-parameters

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

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

/d

僅為目錄

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

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

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

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

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

@echooff

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

pause

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

也不顯示!

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

@echooff

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

pause

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

這里解釋下*號(hào)和?號(hào)的作用,*號(hào)表示任意N個(gè)字符,而?號(hào)只表示任意一個(gè)字符

知道作用了,給大家個(gè)思考題目!

@echooff

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

pause

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

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

/R

遞歸

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

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

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

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

嘛呢?放心他比/D強(qiáng)大多了!

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

@echooff

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

pause

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

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

再來一個(gè)

@echooff

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

pause

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

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

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

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

/L

迭代數(shù)值范圍

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

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

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

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

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

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

看著這說明有點(diǎn)暈吧!咋們看例子就不暈了!

@echooff

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

pause

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

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

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

@echooff

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

pause

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

什么結(jié)果,我先告訴大家,會(huì)打開65535個(gè)CMD窗口….這么多你不死機(jī)算你強(qiáng)!

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

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

/f

'迭代及文件解析

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

串,并使用各種ParsingKeywords選項(xiàng)進(jìn)一步修改解析方式。使用ParsingKeywords令牌選

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

一個(gè)令牌。

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

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

傳遞每個(gè)文件每一行的第一個(gè)空白分隔符號(hào)。跳過空行。

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

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

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

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

先來解釋下那個(gè)多出來的"ParsingKeywords"

他表示4個(gè)參數(shù)

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

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

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

默認(rèn)分隔符集。

tokcns=x,y,m-n-指每行的哪一-個(gè)符號(hào)被傳遞到每個(gè)迭代

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

格式為一個(gè)范圍。通過nth符號(hào)指定mth。如果

符號(hào)字符串中的最后一個(gè)字符星號(hào),

那么額外的變量將在最后一個(gè)符號(hào)解析之后

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

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

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

引號(hào)字符為文字字符串命令并允許在filenameset

中使用雙引號(hào)擴(kuò)起文件名稱。

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

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

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

;郁悶啊!

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

我們的網(wǎng)站

完畢!

@echooff

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

pause

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

我們會(huì)看到屏幕上會(huì)顯示

您好!

我們的網(wǎng)站

完畢!

為什么會(huì)這樣?我來解釋

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

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

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

如果改成

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

@echooff

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

pause

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

@echooff

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

pause

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

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

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

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

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

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

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

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

T-刪除任何引號(hào)("),擴(kuò)展%I

%~fl-將%I擴(kuò)展到一個(gè)完全合格的路徑名

%~dl-僅將%I擴(kuò)展到一個(gè)驅(qū)動(dòng)器號(hào)

%~pl-僅將%I擴(kuò)展到一個(gè)路徑

%~nl-僅將%I擴(kuò)展到一個(gè)文件名

%~xl-僅將%I擴(kuò)展到一個(gè)文件擴(kuò)展名

%~sl-擴(kuò)展的路徑只含有短名

%~al-將%I擴(kuò)展到文件的文件屬性

%~tl-將%1擴(kuò)展到文件的日期/時(shí)間

%-zl-將%I擴(kuò)展到文件的大小

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

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

未被定義,或者沒有找到文件,此組合鍵會(huì)擴(kuò)展到

空字符串

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

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

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

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

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

好開始講解:

~1-刪除任何引號(hào)("),擴(kuò)展%I

這個(gè)變量的作用就如他的說明,刪除引號(hào)!

我們來看這個(gè)例子:

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

"1111

2222"

"3333"

44"44

然后在建立個(gè)BAT文件代碼如下:

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

pause

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

1111

2222"

3333

44"44

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

引號(hào)?i的作用了!

刪除引號(hào)規(guī)則如下(BAT兄補(bǔ)充!)

1、若字符串首尾同時(shí)存在引號(hào),則刪除首尾的引號(hào);

2、若字符串尾不存在引號(hào),則刪除字符串首的引號(hào);

3、如果字符串中間存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論