批處理命令基礎(chǔ)學(xué)習(xí)
轉(zhuǎn)自百度貼吧
批處理文件或批處理程序是一個(gè)包含若干MS-DOS命令的正文文件,擴(kuò)展名為.BAT。當(dāng)在命令提示符下敲入批處理程序的名稱時(shí),MS-DOS成組執(zhí)行此批處理程序中的命令。
任何在命令提示符下可使用的命令都可用在批處理程序中。此外,下面MS-DOS命令是專門(mén)在批處理程序中使用的。
<Call>???????? <If>
<Choice>???????? <Pause>
<Echo>???????? <Rem>
<For>?????????? <Shift>
<Goto>
================================================================
常用命令
echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個(gè)命令,我們就從他們開(kāi)始學(xué)起。
==== willsort 編注 ==============================================
首先, @ 不是一個(gè)命令, 而是DOS 批處理的一個(gè)特殊標(biāo)記符, 僅用于屏蔽命令行回顯. 下面是DOS命令行或批處理中可能會(huì)見(jiàn)到的一些特殊標(biāo)記符:
CR(0D)?? 命令行結(jié)束符
Escape(1B)?? ANSI轉(zhuǎn)義字符引導(dǎo)符
Space(20)?? 常用的參數(shù)界定符
Tab(09) ; =?? 不常用的參數(shù)界定符
+???? COPY命令文件連接符
* ??????? 文件通配符
""?????? 字符串界定符
|?????? 命令管道符
< > >>?? 文件重定向符
@?????? 命令行回顯屏蔽符
/?????? 參數(shù)開(kāi)關(guān)引導(dǎo)符
:?????? 批處理標(biāo)簽引導(dǎo)符
%?????? 批處理變量引導(dǎo)符
其次, :: 確實(shí)可以起到rem 的注釋作用, 而且更簡(jiǎn)潔有效; 但有兩點(diǎn)需要注意:
第一, 除了 :: 之外, 任何以 :開(kāi)頭的字符行, 在批處理中都被視作標(biāo)號(hào), 而直接忽略其后的所有內(nèi)容, 只是為了與正常的標(biāo)號(hào)相區(qū)別, 建議使用 goto 所無(wú)法識(shí)別的標(biāo)號(hào), 即在 :后緊跟一個(gè)非字母數(shù)字的一個(gè)特殊符號(hào).
第二, 與rem 不同的是, ::后的字符行在執(zhí)行時(shí)不會(huì)回顯, 無(wú)論是否用echo on打開(kāi)命令行回顯狀態(tài), 因?yàn)槊罱忉屍鞑徽J(rèn)為他是一個(gè)有效的命令行, 就此點(diǎn)來(lái)看, rem 在某些場(chǎng)合下將比 :: 更為適用; 另外, rem 可以用于 config.sys 文件中.
================================================================
echo 表示顯示此命令后的字符
echo off 表示在此語(yǔ)句后所有運(yùn)行的命令都不顯示命令行本身
@與echo off相象,但它是加在每個(gè)命令行的最前面,表示運(yùn)行時(shí)不顯示這一行的命令行(只能影響當(dāng)前行)。
call 調(diào)用另一個(gè)批處理文件(如果不用call而直接調(diào)用別的批處理文件,那么執(zhí)行完那個(gè)批處理文件后將無(wú)法返回當(dāng)前文件并執(zhí)行當(dāng)前文件的后續(xù)命令)。
pause 運(yùn)行此句會(huì)暫停批處理的執(zhí)行并在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵后繼續(xù)
rem 表示此命令后的字符為解釋行(注釋),不執(zhí)行,只是給自己今后參考用的(相當(dāng)于程序中的注釋)。
==== willsort 編注 =============================================
此處的描述較為混亂, 不如直接引用個(gè)命令的命令行幫助更為條理
-----------------------------------------------------------------
??????????????? ECHO
當(dāng)程序運(yùn)行時(shí),顯示或隱藏批處理程序中的正文。也可用于允許或禁止命令的回顯。
在運(yùn)行批處理程序時(shí),MS-DOS一般在屏幕上顯示(回顯)批處理程序中的命令。
使用ECHO命令可關(guān)閉此功能。
語(yǔ)法
ECHO [ON|OFF]
若要用echo命令顯示一條命令,可用下述語(yǔ)法:
echo [message]
參數(shù)
ON|OFF
指定是否允許命令的回顯。若要顯示當(dāng)前的ECHO的設(shè)置,可使用不帶參數(shù)的ECHO
命令。
message
指定讓MS-DOS在屏幕上顯示的正文。
-----------------------------------------------------------------
??????????????? CALL
從一個(gè)批處理程序中調(diào)用另一個(gè)批處理程序,而不會(huì)引起第一個(gè)批處理的中止。
語(yǔ)法
CALL [drive:][path]filename [batch-parameters]
參數(shù)
[drive:][path]filename
指定要調(diào)用的批處理程序的名字及其存放處。文件名必須用.BAT作擴(kuò)展名。
?
batch-parameters
指定批處理程序所需的命令行信息。
----------------------------------------------------------------------------
????????????? PAUSE
暫停批處理程序的執(zhí)行并顯示一條消息,提示用戶按任意鍵繼續(xù)執(zhí)行。只能在批處
理程序中使用該命令。
語(yǔ)法
PAUSE
----------------------------------------------------------------------------
??????????????? REM
在批處理文件或CONFIG.SYS中加入注解。也可用REM命令來(lái)屏蔽命令(在CONFIG.SYS
中也可以用分號(hào)(;)代替REM命令,但在批處理文件中則不能替代)。
語(yǔ)法
REM [string]
參數(shù)
string
指定要屏蔽的命令或要包含的注解。
================================================================
例1:用edit編輯a.bat文件,輸入下列內(nèi)容后存盤(pán)為c:\a.bat,執(zhí)行該批處理文件后可實(shí)現(xiàn):將根目錄中所有文件寫(xiě)入 a.txt中,啟動(dòng)UCDOS,進(jìn)入WPS等功能。
批處理文件的內(nèi)容為: 命令注釋:
@echo off 不顯示后續(xù)命令行及當(dāng)前命令行
dir c:\*.* >a.txt 將c盤(pán)文件列表寫(xiě)入a.txt
call c:\ucdos\ucdos.bat 調(diào)用ucdos
echo 你好 顯示"你好"
pause 暫停,等待按鍵繼續(xù)
rem 準(zhǔn)備運(yùn)行wps 注釋:準(zhǔn)備運(yùn)行wps
cd ucdos 進(jìn)入ucdos目錄
wps 運(yùn)行wps
批處理文件的參數(shù)
批處理文件還可以像C語(yǔ)言的函數(shù)一樣使用參數(shù)(相當(dāng)于DOS命令的命令行參數(shù)),這需要用到一個(gè)參數(shù)表示符“%”。
%[1-9]表示參數(shù),參數(shù)是指在運(yùn)行批處理文件時(shí)在文件名后加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數(shù)字符串用%1到%9順序表示。
例2:C:根目錄下有一批處理文件名為f.bat,內(nèi)容為:
@echo off
format %1
如果執(zhí)行C:\>f a:
那么在執(zhí)行f.bat時(shí),%1就表示a:,這樣format %1就相當(dāng)于format a:,于是上面的命令運(yùn)行時(shí)實(shí)際執(zhí)行的是format a:
例3:C:根目錄下一批處理文件名為t.bat,內(nèi)容為:
@echo off
type %1
type %2
那么運(yùn)行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
于是上面的命令將順序地顯示a.txt和b.txt文件的內(nèi)容。
特殊命令
if goto choice for是批處理文件中比較高級(jí)的命令,如果這幾個(gè)你用得很熟練,你就是批處理文件的專家啦。
一、if 是條件語(yǔ)句,用來(lái)判斷是否符合規(guī)定的條件,從而決定執(zhí)行不同的命令。 有三種格式:
1、if [not] "參數(shù)" == "字符串" 待執(zhí)行的命令
參數(shù)如果等于(not表示不等,下同)指定的字符串,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。
例:if "%1"=="a" format a:
if 的命令行幫助中關(guān)于此點(diǎn)的描述為:
? IF [NOT] string1==string2 command
在此有以下幾點(diǎn)需要注意:
? 1. 包含字符串的雙引號(hào)不是語(yǔ)法所必須的, 而只是習(xí)慣上使用的一種"防空"字符
? 2. string1 未必是參數(shù), 它也可以是環(huán)境變量, 循環(huán)變量以及其他字符串常量或變量
? 3. command 不是語(yǔ)法所必須的, string2 后跟一個(gè)空格就可以構(gòu)成一個(gè)有效的命令行
================================================================
2、if [not] exist [路徑\]文件名 待執(zhí)行的命令
如果有指定的文件,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。
如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文件,則顯示它的內(nèi)容。
****** willsort 編注 ********
也可以使用以下的用法:
? if exist <device> command
device 是指DOS系統(tǒng)中已加載的設(shè)備, 在win98下通常有:
? AUX, PRN, CON, NUL
? COM1, COM2, COM3, COM4
?
?? LPT1, LPT2, LPT3, LPT4
? XMSXXXX0, EMMXXXX0
? A: B: C: ...,
? CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具體的內(nèi)容會(huì)因硬軟件環(huán)境的不同而略有差異, 使用這些設(shè)備名稱時(shí), 需要保證以下三點(diǎn):
? 1. 該設(shè)備確實(shí)存在(由軟件虛擬的設(shè)備除外)
? 2. 該設(shè)備驅(qū)動(dòng)程序已加載(aux, prn等標(biāo)準(zhǔn)設(shè)備由系統(tǒng)缺省定義)
? 3. 該設(shè)備已準(zhǔn)備好(主要是指a: b: ..., com1..., lpt1...等)
可通過(guò)命令 mem/d | find "device" /i 來(lái)檢閱你的系統(tǒng)中所加載的設(shè)備
另外, 在DOS系統(tǒng)中, 設(shè)備也被認(rèn)為是一種特殊的文件, 而文件也可以稱作字符設(shè)備; 因?yàn)樵O(shè)備(device)與文件都是使用句柄(handle)來(lái)管理的, 句柄就是名字, 類似于文件名, 只不過(guò)句柄不是應(yīng)用于磁盤(pán)管理, 而是應(yīng)用于內(nèi)存管理而已, 所謂設(shè)備加載也即指在內(nèi)存中為其分配可引用的句柄.
================================================================
3、if errorlevel <數(shù)字> 待執(zhí)行的命令
很多DOS程序在運(yùn)行結(jié)束后會(huì)返回一個(gè)數(shù)字值用來(lái)表示程序運(yùn)行的結(jié)果(或者狀態(tài)),通過(guò)if errorlevel命令可以判斷程序的返回值,根據(jù)不同的返回值來(lái)決定執(zhí)行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等于指定的數(shù)字,則條件成立,運(yùn)行命令,否則運(yùn)行下一句。
如if errorlevel 2 goto x2
==== willsort 編注 ====================================================
返回值從大到小的順序排列不是必須的, 而只是執(zhí)行命令為 goto 時(shí)的習(xí)慣用法, 當(dāng)使用 set 作為執(zhí)行命令時(shí), 通常會(huì)從小到大順序排列, 比如需將返回碼置入環(huán)境變量, 就需使用以下的順序形式:
if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...
當(dāng)然, 也可以使用以下循環(huán)來(lái)替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e
更高效簡(jiǎn)潔的用法, 可以參考我寫(xiě)的另一篇關(guān)于獲取 errorlevel 的文章
出現(xiàn)此種現(xiàn)象的原因是, if errorlevel 比較返回碼的判斷條件并非等于, 而是大于等于. 由于 goto 的跳轉(zhuǎn)特性, 由小到大排序會(huì)導(dǎo)致在較小的返回碼處就跳出; 而由于 set命令的 "重復(fù)" 賦值特性, 由大到小排序會(huì)導(dǎo)致較小的返回碼 "覆蓋" 較大的返回碼.
另外, 雖然 if errorlevel=<數(shù)字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時(shí)將 = 作為命令行切分符而忽略掉罷了
================================================================
二、goto 批處理文件運(yùn)行到這里將跳到goto所指定的標(biāo)號(hào)(標(biāo)號(hào)即label,標(biāo)號(hào)用:后跟標(biāo)準(zhǔn)字符串來(lái)定義)處,goto語(yǔ)句一般與if配合使用,根據(jù)不同的條件來(lái)執(zhí)行不同的命令組。
如:
goto end
:end
echo this is the end
標(biāo)號(hào)用“:字符串”來(lái)定義,標(biāo)號(hào)所在行不被執(zhí)行。
==== willsort 編注 ====================================================
label 常被譯為 "標(biāo)簽" , 但是這并不具有廣泛的約定性.
goto <label> 與 :<label> 聯(lián)用可實(shí)現(xiàn)執(zhí)行中途的跳轉(zhuǎn), 再結(jié)合 if 可實(shí)現(xiàn)執(zhí)行過(guò)程的條件分支, 多個(gè) if 即可實(shí)現(xiàn)命令的分組, 類似 C 中 switch case 結(jié)構(gòu)或者 Basic 中的 select case 結(jié)構(gòu), 大規(guī)模且結(jié)構(gòu)化的命令分組即可實(shí)現(xiàn)高級(jí)語(yǔ)言中的函數(shù)功能. 以下是批處理和C/Basic在語(yǔ)法結(jié)構(gòu)上的對(duì)照:
? Batch?????????? C / Basic
? goto&:?????????? goto&:
? goto&:&if???????? if{}&else{} / if&elseif&endif
? goto&:&if...?????? switch&case / select case
? goto&:&if&set&envar...?? function() / function(),sub()
================================================================
三、choice 使用此命令可以讓用戶輸入一個(gè)字符(用于選擇),從而根據(jù)用戶的選擇返回不同的errorlevel,然后于if errorlevel配合,根據(jù)用戶的選擇運(yùn)行不同的命令。
?
?注意:choice命令為DOS或者Windows系統(tǒng)提供的外部命令,不同版本的choice命令語(yǔ)法會(huì)稍有不同,請(qǐng)用choice /?查看用法。
choice的命令語(yǔ)法(該語(yǔ)法為Windows 2003中choice命令的語(yǔ)法,其它版本的choice的命令語(yǔ)法與此大同小異):
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
描述:
該工具允許用戶從選擇列表選擇一個(gè)項(xiàng)目并返回所選項(xiàng)目的索引。
參數(shù)列表:
/C?? choices?? 指定要?jiǎng)?chuàng)建的選項(xiàng)列表。默認(rèn)列表是 "YN"。
/N???????? 在提示符中隱藏選項(xiàng)列表。提示前面的消息得到顯示,
??????? 選項(xiàng)依舊處于啟用狀態(tài)。
/CS?????? 允許選擇分大小寫(xiě)的選項(xiàng)。在默認(rèn)情況下,這個(gè)工具
??????? 是不分大小寫(xiě)的。
/T?? timeout?? 做出默認(rèn)選擇之前,暫停的秒數(shù)。可接受的值是從 0
??????? 到 9999。如果指定了 0,就不會(huì)有暫停,默認(rèn)選項(xiàng)
??????? 會(huì)得到選擇。
/D?? choice?? 在 nnnn 秒之后指定默認(rèn)選項(xiàng)。字符必須在用 /C 選
??????? 項(xiàng)指定的一組選擇中; 同時(shí),必須用 /T 指定 nnnn。
/M?? text???? 指定提示之前要顯示的消息。如果沒(méi)有指定,工具只
??????? 顯示提示。
/????????? 顯示幫助消息。
注意:
ERRORLEVEL 環(huán)境變量被設(shè)置為從選擇集選擇的鍵索引。列出的第一個(gè)選
擇返回 1,第二個(gè)選擇返回 2,等等。如果用戶按的鍵不是有效的選擇,
該工具會(huì)發(fā)出警告響聲。如果該工具檢測(cè)到錯(cuò)誤狀態(tài),它會(huì)返回 255 的
ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會(huì)返回 0
的 ERRORLEVEL 值。在一個(gè)批程序中使用 ERRORLEVEL 參數(shù)時(shí),將參數(shù)降
序排列。
示例:
CHOICE /?
CHOICE /C YNC /M "確認(rèn)請(qǐng)按 Y,否請(qǐng)按 N,或者取消請(qǐng)按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "選項(xiàng) 1 請(qǐng)選擇 a,選項(xiàng) 2 請(qǐng)選擇 b。"
CHOICE /C ab /N /M "選項(xiàng) 1 請(qǐng)選擇 a,選項(xiàng) 2 請(qǐng)選擇 b。"
==== willsort 編注 ====================================================
我列出win98下choice的用法幫助, 已資區(qū)分
Waits for the user to choose one of a set of choices.
等待用戶選擇一組待選字符中的一個(gè)
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]
/C[:]choices Specifies allowable keys. Default is YN
??? 指定允許的按鍵(待選字符), 默認(rèn)為YN
/N???? Do not display choices and ? at end of prompt string.
??? 不顯示提示字符串中的問(wèn)號(hào)和待選字符
/S???? Treat choice keys as case sensitive.
??? 處理待選字符時(shí)大小寫(xiě)敏感
/T[:]c,nn?? Default choice to c after nn seconds
??? 在 nn 秒后默認(rèn)選擇 c
text???? Prompt string to display
??? 要顯示的提示字符串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被設(shè)置為用戶鍵入的字符在待選字符中的偏移值
================================================================
如果我運(yùn)行命令:CHOICE /C YNC /M "確認(rèn)請(qǐng)按 Y,否請(qǐng)按 N,或者取消請(qǐng)按 C。"
屏幕上會(huì)顯示:
確認(rèn)請(qǐng)按 Y,否請(qǐng)按 N,或者取消請(qǐng)按 C。 [Y,N,C]?
例:test.bat的內(nèi)容如下(注意,用if errorlevel判斷返回值時(shí),要按返回值從高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此批處理運(yùn)行后,將顯示“defrag,mem,end[D,M,E]?” ,用戶可選擇d m e ,然后if語(yǔ)句根據(jù)用戶的選擇作出判斷,d表示執(zhí)行標(biāo)號(hào)為defrag的程序段,m表示執(zhí)行標(biāo)號(hào)為mem的程序段,e表示執(zhí)行標(biāo)號(hào)為end的程序段,每個(gè)程序段最后都以goto end將程序跳到end標(biāo)號(hào)處,然后程序?qū)@示good bye,批處理運(yùn)行結(jié)束。
?
?四、for 循環(huán)命令,只要條件符合,它將多次執(zhí)行同一命令。
語(yǔ)法:
對(duì)一組文件中的每一個(gè)文件執(zhí)行某個(gè)特定命令。
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個(gè)單一字母可替換的參數(shù)。
(set)?? 指定一個(gè)或一組文件。可以使用通配符。
command?? 指定對(duì)每個(gè)文件執(zhí)行的命令。
command-parameters
??? 為特定命令指定參數(shù)或命令行開(kāi)關(guān)。
例如一個(gè)批處理文件中有一行:
for %%c in (*.bat *.txt) do type %%c
則該命令行會(huì)顯示當(dāng)前目錄下所有以bat和txt為擴(kuò)展名的文件的內(nèi)容。
==== willsort 編注 ====================================================
需要指出的是, 當(dāng)()中的字符串并非單個(gè)或多個(gè)文件名時(shí), 它將單純被當(dāng)作字符串替換, 這個(gè)特性再加上()中可以嵌入多個(gè)字符串的特性, 很明顯 for 可以被看作一種遍歷型循環(huán).
當(dāng)然, 在 nt/2000/xp/2003 系列的命令行環(huán)境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者文件中的字符串, 也有很多開(kāi)關(guān)被用于擴(kuò)展了文件替換功能.
================================================================
批處理示例
1. IF-EXIST
1) 首先用記事本在C:\建立一個(gè)test1.bat批處理文件,文件內(nèi)容如下:
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist
然后運(yùn)行它:
C:\>TEST1.BAT
如果C:\存在AUTOEXEC.BAT文件,那么它的內(nèi)容就會(huì)被顯示出來(lái),如果不存在,批處理就會(huì)提示你該文件不存在。
2) 接著再建立一個(gè)test2.bat文件,內(nèi)容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist
執(zhí)行:
C:\>TEST2 AUTOEXEC.BAT
該命令運(yùn)行結(jié)果同上。
說(shuō)明:
(1) IF EXIST 是用來(lái)測(cè)試文件是否存在的,格式為
IF EXIST [路徑+文件名] 命令
(2) test2.bat文件中的%1是參數(shù),DOS允許傳遞9個(gè)批參數(shù)信息給批處理文件,分別為%1~%9(%0表示test2命令本身) ,這有點(diǎn)象編程中的實(shí)參和形參的關(guān)系,%1是形參,AUTOEXEC.BAT是實(shí)參。
==== willsort 編注 ====================================================
DOS沒(méi)有 "允許傳遞9個(gè)批參數(shù)信息" 的限制, 參數(shù)的個(gè)數(shù)只會(huì)受到命令行長(zhǎng)度和所調(diào)用命令處理能力的限制. 但是, 我們?cè)谂幚沓绦蛑? 在同一時(shí)刻只能同時(shí)引用10個(gè)參數(shù), 因?yàn)?DOS只給出了 %0~%9這十個(gè)參數(shù)引用符.
================================================================
3) 更進(jìn)一步的,建立一個(gè)名為T(mén)EST3.BAT的文件,內(nèi)容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN
如果運(yùn)行:
C:\>TEST3 A B C
屏幕上會(huì)顯示:
XIAO
TIAN
XIN
如果運(yùn)行:
C:\>TEST3 A B
屏幕上會(huì)顯示
XIAO
TIAN
在這個(gè)命令執(zhí)行過(guò)程中,DOS會(huì)將一個(gè)空字符串指定給參數(shù)%3。
2、IF-ERRORLEVEL
建立TEST4.BAT,內(nèi)容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件
然后執(zhí)行文件:
C:\>TEST4
如果文件拷貝成功,屏幕就會(huì)顯示“成功拷貝文件”,否則就會(huì)顯示“文件拷貝失敗”。
IF ERRORLEVEL 是用來(lái)測(cè)試它的上一個(gè)DOS命令的返回值的,注意只是上一個(gè)命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批處理文件是錯(cuò)誤的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶通過(guò)ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預(yù)置錯(cuò)誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過(guò)程中寫(xiě)盤(pán)錯(cuò)誤
無(wú)論拷貝是否成功,后面的:
未找到拷貝文件
用戶通過(guò)ctrl-c中止拷貝操作
?
?預(yù)置錯(cuò)誤阻止文件拷貝操作
拷貝過(guò)程中寫(xiě)盤(pán)錯(cuò)誤
都將顯示出來(lái)。
以下就是幾個(gè)常用命令的返回值及其代表的意義:
backup
0 備份成功
1 未找到備份文件
2 文件共享沖突阻止備份完成
3 用戶用ctrl-c中止備份
4 由于致命的錯(cuò)誤使備份操作中止
diskcomp
0 盤(pán)比較相同
1 盤(pán)比較不同
2 用戶通過(guò)ctrl-c中止比較操作
3 由于致命的錯(cuò)誤使比較操作中止
4 預(yù)置錯(cuò)誤中止比較
diskcopy
0 盤(pán)拷貝操作成功
1 非致命盤(pán)讀/寫(xiě)錯(cuò)
2 用戶通過(guò)ctrl-c結(jié)束拷貝操作
3 因致命的處理錯(cuò)誤使盤(pán)拷貝中止
4 預(yù)置錯(cuò)誤阻止拷貝操作
format
0 格式化成功
3 用戶通過(guò)ctrl-c中止格式化處理
4 因致命的處理錯(cuò)誤使格式化中止
5 在提示“proceed with format(y/n)?”下用戶鍵入n結(jié)束
xcopy
0 成功拷貝文件
1 未找到拷貝文件
2 用戶通過(guò)ctrl-c中止拷貝操作
4 預(yù)置錯(cuò)誤阻止文件拷貝操作
5 拷貝過(guò)程中寫(xiě)盤(pán)錯(cuò)誤
==== willsort 編注 ====================================================
chkdsk
0?? 未找到錯(cuò)誤
255 找到一個(gè)或多個(gè)錯(cuò)誤
choice
0?? 用戶按下ctrl+c/break
1?? 用戶按下第一個(gè)鍵
255 檢測(cè)到命令行中的錯(cuò)誤條件
其它 用戶按下的有效字符在列表中的位置
defrag
0?? 碎片壓縮成功
1?? 出現(xiàn)內(nèi)部錯(cuò)誤
2?? 磁盤(pán)上沒(méi)有空簇。要運(yùn)行DEFRAG,至少要有一個(gè)空簇
3?? 用戶用Ctrl+C退出了DEFRAG
4?? 出現(xiàn)一般性錯(cuò)誤
5?? DEFRAG在讀簇時(shí)遇到錯(cuò)誤
6?? DEFRAG在寫(xiě)簇時(shí)遇到錯(cuò)誤
7?? 分配空間有錯(cuò)
8?? 內(nèi)存錯(cuò)
9?? 沒(méi)有足夠空間來(lái)壓縮磁盤(pán)碎片
deltree
0?? 成功地刪除一個(gè)目錄
diskcomp
0?? 兩盤(pán)相同
1?? 發(fā)現(xiàn)不同
2?? 按CTRL+C 終止了比較
3?? 出現(xiàn)嚴(yán)重錯(cuò)誤
4?? 出現(xiàn)初始化錯(cuò)誤
find
0?? 查找成功且至少找到了一個(gè)匹配的字符串
1?? 查找成功但沒(méi)找到匹配的字符串
2?? 查找中出現(xiàn)了錯(cuò)誤
keyb
0?? 鍵盤(pán)定義文件裝入成功
1?? 使用了非法的鍵盤(pán)代碼,字符集或語(yǔ)法
2?? 鍵盤(pán)定義文件壞或未找到
4?? 鍵盤(pán)、監(jiān)視器通訊時(shí)出錯(cuò)
5?? 要求的字符集未準(zhǔn)備好
move
0?? 成功地移動(dòng)了指定的文件
1?? 發(fā)生了錯(cuò)誤
msav /N
86?? 檢查到了病毒
replace
0?? REPLACE成功地替換或加入了文件
1?? MS-DOS版本和REPLACE不兼容
2?? REPLACE找不到源文件
3?? REPLACE找不到源路徑或目標(biāo)路徑
5?? 不能存取要替換的文件
8?? 內(nèi)存不夠無(wú)法執(zhí)行REPLACE
11?? 命令行句法錯(cuò)誤
restore
0?? RESTORE成功地恢復(fù)了文件
1?? RESTORE找不到要恢復(fù)的文件
3?? 用戶按CTRL+C終止恢復(fù)過(guò)程
4?? RESTORE因錯(cuò)誤而終止
scandisk
0?? ScanDisk在它檢查的驅(qū)動(dòng)器上未檢測(cè)到任何錯(cuò)誤
1?? 由于命令行的語(yǔ)法不對(duì),不能運(yùn)行ScanDisk
2?? 由于內(nèi)存用盡或發(fā)生內(nèi)部錯(cuò)誤,ScanDisk意外終止
3?? 用戶讓ScanDisk中途退出
4?? 進(jìn)行盤(pán)面掃描時(shí),用戶決定提前退出
254 ScanDisk找到磁盤(pán)故障并已全部校正
255 ScanDisk找到磁盤(pán)故障,但未能全部校正
setver
0?? SETVER成功地完成了任務(wù)
1?? 用戶指定了一個(gè)無(wú)效的命令開(kāi)關(guān)
2?? 用戶指定了一個(gè)非法的文件名
3?? 沒(méi)有足夠的系統(tǒng)內(nèi)存來(lái)運(yùn)行命令
4?? 用戶指定了一個(gè)非法的版本號(hào)格式
5?? SETVER在版本表中未找到指定的項(xiàng)
6?? SETVER未找到SETVER.EXE文件
7?? 用戶指定了一個(gè)非法的驅(qū)動(dòng)器
8?? 用戶指定了太多的命令行參數(shù)
9?? SETVER檢測(cè)到丟失了命令行參數(shù)
10?? 在讀SETVER.EXE文件時(shí),SETVER檢測(cè)到發(fā)生錯(cuò)誤
11?? SETVER.EXE文件損壞
12?? 指定的SETVER.EXE文件不支持版本表
13?? 版本表中沒(méi)有足夠的空間存放新的項(xiàng)
14?? 在寫(xiě)SETVER.EXE文件時(shí)SETVER檢測(cè)到發(fā)生錯(cuò)誤
================================================================
3、IF STRING1 == STRING2
建立TEST5.BAT,文件內(nèi)容如下:
@echo off
IF "%1" == "A" FORMAT A:
執(zhí)行:
C:\>TEST5 A
屏幕上就出現(xiàn)是否將A:盤(pán)格式化的內(nèi)容。
注意:為了防止參數(shù)為空的情況,一般會(huì)將字符串用雙引號(hào)(或者其它符號(hào),注意不能使用保留符號(hào))括起來(lái)。
如:if [%1]==[A] 或者 if %1*==A*
5、GOTO
建立TEST6.BAT,文件內(nèi)容如下:
@ECHO OFF
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:\AUTOEXEC.BAT D:\
:_DONE
注意:
(1) 標(biāo)號(hào)前是ASCII字符的冒號(hào)":",冒號(hào)與標(biāo)號(hào)之間不能有空格。
(2) 標(biāo)號(hào)的命名規(guī)則與文件名的命名規(guī)則相同。
(3) DOS支持最長(zhǎng)八位字符的標(biāo)號(hào),當(dāng)無(wú)法區(qū)別兩個(gè)標(biāo)號(hào)時(shí),將跳轉(zhuǎn)至最近的一個(gè)標(biāo)號(hào)。
==== willsort 編注 ====================================================
1)標(biāo)號(hào)也稱作標(biāo)簽(label)
2)標(biāo)簽不能以大多數(shù)的非字母數(shù)字字符開(kāi)始, 而文件名中則可以使用很多
3)當(dāng)無(wú)法區(qū)別兩個(gè)標(biāo)簽時(shí), 將跳轉(zhuǎn)至位置最靠前的標(biāo)簽
================================================================
6、FOR
建立C:\TEST7.BAT,文件內(nèi)容如下:
@ECHO OFF
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C
運(yùn)行:
C:\>TEST7
執(zhí)行以后,屏幕上會(huì)將C:盤(pán)根目錄下所有以BAT、TXT、SYS為擴(kuò)展名的文件內(nèi)容顯示出來(lái)(不包括隱藏文件)。?
?
posted on 2007-03-07 13:04 舵手 閱讀(1951) 評(píng)論(1) 編輯 收藏