bat中errorlevel與%errorlevel%的區(qū)別
簡(jiǎn)要說明
他們都是判斷上個(gè)命令的返回值。
當(dāng)使用if errorlevel 值 cmmand 句式時(shí),它的含義是:如果返回的錯(cuò)誤碼值大于或等于值 的時(shí)候,將執(zhí)行cmmand
操作;
當(dāng)使用if %errorlevel%==值 cmmand 句式時(shí),它含義是:如果返回的錯(cuò)誤碼值等于值 的時(shí)候,將執(zhí)行cmmand操作。
一般上一條命令的執(zhí)行結(jié)果返回的值只有兩個(gè),"成功"用0 表示 "失敗"用 1 表示,實(shí)際上,errorlevel 返回值可
以在0~255 之間,
例如xcopy 默認(rèn)的errorlevel 值就有5 個(gè),分別表示5 種執(zhí)行狀態(tài):
0復(fù)制文件成功
1 未找到復(fù)制文件
2 用戶通過CTRL C 終止了xcopy操作
4 出現(xiàn)了初始化錯(cuò)誤
5 出現(xiàn)了磁盤寫入錯(cuò)誤
if %ERRORLEVEL%對(duì)數(shù)值的比較方法不僅僅限于等于,可以使用參數(shù)來控制。
比如:IF %ERRORLEVEL% LEQ 1 goto okay
全部的比較參數(shù)如下:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
下面是一些補(bǔ)充說明
一,if errorlevel
測(cè)試前一程序的返回狀態(tài),如果該程序的返回狀態(tài)大與或等于所說明的值就執(zhí)行所說明的DOS命令
if errorlevel 命令讓批處理文件測(cè)試一程序的返回狀態(tài)值,然后根據(jù)測(cè)試結(jié)果作相應(yīng)的進(jìn)一步處理,當(dāng)
MS-DOS遇到一條 IF errorlevel 命令時(shí) ,它就將前一條MS-DOS命令的返回狀態(tài)值與在IF命令中所說的值想比較,如果該程序的返回狀態(tài) 大于或等于 IF命令所說明的值MS-DOS就執(zhí)行相應(yīng)的命令,如果返回狀態(tài)值 小于 所說明的值,MS-DOS就從批處理文件中的下一條命令繼續(xù)執(zhí)行,如果用的是IF NOT ERRORLEVEL命令,就正好相反
例子:
下面批處理文件執(zhí)行FORMATION命令,并顯示基于 FORMAT的返回值的完整狀態(tài)信息:
@echo off format a: if errorlevel 5 goto no_response if errorlevel 4 goto error if errorlevel 3 goto user_ctrlc echo successful format operation goto done no_response echo fixed disk will not be formatted goto done :error echo error in processing.format incopplete goto done :user_ctrlc echo format incomplete to ctrl_c :done
批處理文件首先測(cè)試最大的返回狀態(tài)值。記住,如果返回狀態(tài)值大于 或等于有IF命令所說明的值,MS-DOS就執(zhí)行所說明的命令;如果該批處理文件首先測(cè)試返回狀態(tài)值是否為3,那么MS-DOS會(huì)始終執(zhí)行" goto user ctrlc",而不論返回狀態(tài)值是3或4,或還是5。這是因?yàn)檫@些返回狀態(tài)值都是大于或等于3的通過將測(cè)試次序倒過來,該批處理文件就能對(duì)各返回狀態(tài)值分別執(zhí)行正確的那組命令
通過組合IF ERRORLEVEL和IF not ERRORLEVEL,可以測(cè)試一特定的返回狀態(tài)值。例如,可以用下列命令測(cè)試返回狀態(tài)值是否為3:
if errorlevel 3 if not errorlevel 4 goto user_ctrlc
注意:這時(shí)最好用 if %errorlevel%==3 goto user_ctrlc
二,IF NOT ERRORLEVEL
測(cè)試前一程序的返回狀態(tài),如果該程序的返回狀態(tài)小于所說明的值就執(zhí)行所說明的DOS命令
將not算符用于 IF ERRORLEVEL命令,批處理文件就能測(cè)試一返回值是否小于一具體值,如果是,MS-DOS就執(zhí)行所說明的命令:否側(cè),它就從批處理文件中的 下一條命令處繼續(xù)執(zhí)行,IF not errorlevel 命令的 格式如下:
if not errorlevel 值 DOS命令
三, 對(duì)特定 ERRORLEVEL 值進(jìn)行測(cè)試
當(dāng)一個(gè)批處理文件變的 較為復(fù)雜時(shí),可能會(huì)需要將一條 IF ERRORLEVEL命令與一條 IF NOT ERRORLEVEL m命令后側(cè)枝從 0 至4的返回狀態(tài)值
@echo off diskcopy a: b: if errorlevel 0 if not errorlevel 1 echo exit 0 if errorlevel 1 if not errorlevel 2 echo exit 1 if errorlevel 2 if not errorlevel 3 echo exit 2 if errorlevel 3 if not errorlevel 4 echo exit 3 if errorlevel 4 if not errorlevel 5 echo exit 4
在第一條IF命令中。第一個(gè)測(cè)試(if errorlevel 0)保證返回狀態(tài)值至少為0:第二個(gè)測(cè)試(IF NOT ERRORLEVEL 1)保證返回狀態(tài)值小于1.將這兩個(gè)測(cè)試組合起來。該命令就保證返回狀態(tài)值為0,類試的,第二條IF命令返回狀態(tài)值為1,等等。
注意:當(dāng)需要 對(duì)特定 ERRORLEVEL 值進(jìn)行測(cè)試時(shí),最好用if %errorlevel%==值 cmmand的形式。
相關(guān)文章
Windows下使用命令實(shí)現(xiàn)文件換行符替換
這篇文章主要介紹了Windows下使用命令實(shí)現(xiàn)文件換行符替換,本文需求比較特別,本文詳細(xì)介紹了需求和解決方法,需要的朋友可以參考下2015-01-01用BAT實(shí)時(shí)讀取某個(gè)文件目錄下文件數(shù)(包括子目錄)
實(shí)時(shí)取得某個(gè)文件目錄下文件數(shù),我嘗試了好多方法,最后發(fā)現(xiàn)其實(shí)用BAT文件還是比較方便的,比如指定幾個(gè)文件目錄,然后分別把他們的文件數(shù)目統(tǒng)計(jì)出來(包括子目錄),把值放入指定的文本文件,為了實(shí)時(shí)讀取,我做了循環(huán)2013-05-05用批處理實(shí)現(xiàn)讀取文本文件并實(shí)現(xiàn)超鏈接代碼的輸出
今天用chm反編譯軟件實(shí)現(xiàn)了輸出所以文章類別功能,可是沒有index索引頁,還好都是中文文章名,我想讓這每行文本都是以超連接的形式顯示到頁面中,實(shí)現(xiàn)索引2008-06-06