![批處理基礎(chǔ)知識(shí)_第1頁](http://file4.renrendoc.com/view/a93878fe72cc265e9623ae36c206147e/a93878fe72cc265e9623ae36c206147e1.gif)
![批處理基礎(chǔ)知識(shí)_第2頁](http://file4.renrendoc.com/view/a93878fe72cc265e9623ae36c206147e/a93878fe72cc265e9623ae36c206147e2.gif)
![批處理基礎(chǔ)知識(shí)_第3頁](http://file4.renrendoc.com/view/a93878fe72cc265e9623ae36c206147e/a93878fe72cc265e9623ae36c206147e3.gif)
![批處理基礎(chǔ)知識(shí)_第4頁](http://file4.renrendoc.com/view/a93878fe72cc265e9623ae36c206147e/a93878fe72cc265e9623ae36c206147e4.gif)
![批處理基礎(chǔ)知識(shí)_第5頁](http://file4.renrendoc.com/view/a93878fe72cc265e9623ae36c206147e/a93878fe72cc265e9623ae36c206147e5.gif)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借款擔(dān)保人協(xié)議書
- 軟件開發(fā)和測試技術(shù)作業(yè)指導(dǎo)書
- 策劃推廣服務(wù)合同
- 數(shù)據(jù)挖掘與商業(yè)智能解決方案作業(yè)指導(dǎo)書
- XXX高校報(bào)告廳項(xiàng)目會(huì)議播音系統(tǒng)設(shè)計(jì)方案
- 農(nóng)業(yè)產(chǎn)業(yè)化環(huán)境保護(hù)方案
- 小學(xué)二年級(jí)數(shù)學(xué)上學(xué)期口算訓(xùn)練 打印版
- 2025年益陽貨運(yùn)從業(yè)資格證模擬考試保過版
- 2025年貴陽貨運(yùn)從業(yè)資格證考試模擬考試題庫答案解析
- 疼痛管理服務(wù)合同(2篇)
- 新高考2024屆高三物理二輪復(fù)習(xí)策略講座
- 中考英語必背單詞匯總手冊(打印版)
- IATF-16949:2016質(zhì)量管理體系培訓(xùn)講義
- 記賬憑證封面直接打印模板
- 北京房地產(chǎn)典當(dāng)合同
- 全世界各國的新年風(fēng)俗
- 公開招標(biāo)文件范本
- 第三單元為生活增添情趣第1課插花課件
- 教育的目的主題班會(huì)ppt
- 兒童歌曲彈唱課程標(biāo)準(zhǔn)
- 大學(xué)生心理健康教育全套PPT完整教學(xué)課件
評(píng)論
0/150
提交評(píng)論