Windows 批處理 -- IF-ERRORLEVEL使用方法

From: http://www.jb51.net/article/7525.htm sql


命令解釋:
服務器

咱們都知道if是命令行下的一個條件判斷語句,ERRORLEVEL是它的一個參數,翻譯過來就是「錯誤返回碼」的意思,它的做用是判斷前一條命令的錯誤返回值,而後和定義的字符值進行比較,再決定進行什麼動做.網絡


實例1:ide

今天遠程一個客戶,發現他的服務器會不定時自動斷開網絡,致使客戶端鏈接不了服務端,可是重啓服務之後又恢復正常,初步判斷多是因爲某個系統服務與winpacp有衝突,建議用戶恢復操做系統,他想等晚上再開始操做,今天就只好一直運行個ping,發現timed out就手動重啓服務。我記得if能夠利用程序的返回值做爲判斷,就幫他寫了這個腳本:測試



@echo off
: p
ping 61.152.XX.XX
IF ERRORLEVEL 1 goto aa
IF ERRORLEVEL 0 goto bb
:aa
echo 正在重啓軟件服務...
net stop MSSQLSERVER
net start MSSQLSERVER
goto p
:bb
echo 繼續ping中。。。
goto p
spa


這段命令的做用是,ping 61.152.XX.XX這個IP,若是ping不通則重啓mssql服務,而後繼續ping,若是可以ping通,仍是繼續ping...操作系統

咱們都知道if是命令行下的一個條件判斷語句,ERRORLEVEL是它的一個參數,翻譯過來就是「錯誤返回碼」的意思,它的做用是判斷前一條命令的錯誤返回值,而後和定義的字符值進行比較,再決定進行什麼動做。
格式是這樣:.net

if ERRORLEVEL nubmer commend
例:if ERRORLEVEL 1 echo 返回值等於1命令行

那麼你們就要問了,我怎麼獲取到前一個命令的返回值呢?
方法很簡單,拿ping來講,咱們先運行一個ping 127.0.0.1
運行結果是Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
這時候咱們輸入,echo %errorlevel%,就能夠看到返回值是0,
而後咱們在ping一個不存在的ip,好比192.192.192.192
ping命令顯示 Request timed out.。
ok,咱們在用echo %errorlevel%查一下返回值是多少。
如今變成了1。翻譯

你也能夠用這個方法來查詢其餘命令的返回值,好比copy、dir等等。
固然if ERRORLEVEL對數值的比較方法不只僅限於等於。在微軟的幫助中咱們能夠看到:

IF %ERRORLEVEL% LEQ 1 goto okay

這裏的LEQ表示「小於等於」,所有的比較參數以下:
EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於

若有錯誤,感謝指正。


 實例2:

IF-ERRORLEVEL

創建TEST4.BAT,內容以下:
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 文件拷貝失敗 
IF ERRORLEVEL 0 ECHO 成功拷貝文件 
而後執行文件:
C:\>TEST4
若是文件拷貝成功,屏幕就會顯示「成功拷貝文件」,不然就會顯示「文件拷貝失敗」。 
IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,並且返回值必須依照從大到小次序順序判斷。
所以下面的批處理文件是錯誤的:
@ECHO OFF 
XCOPY C:\AUTOEXEC.BAT D:\ 
IF ERRORLEVEL 0 ECHO 成功拷貝文件 
IF ERRORLEVEL 1 ECHO 未找到拷貝文件 
IF ERRORLEVEL 2 ECHO 用戶經過ctrl-c停止拷貝操做 
IF ERRORLEVEL 3 ECHO 預置錯誤阻止文件拷貝操做 
IF ERRORLEVEL 4 ECHO 拷貝過程當中寫盤錯誤 
不管拷貝是否成功,後面的: 
未找到拷貝文件 
用戶經過ctrl-c停止拷貝操做 
預置錯誤阻止文件拷貝操做 
拷貝過程當中寫盤錯誤
都將顯示出來。 
如下就是幾個經常使用命令的返回值及其表明的意義: 
backup 
0 備份成功 
1 未找到備份文件 
2 文件共享衝突阻止備份完成 
3 用戶用ctrl-c停止備份 
4 因爲致命的錯誤使備份操做停止 
diskcomp 
0 盤比較相同 
1 盤比較不一樣 
2 用戶經過ctrl-c停止比較操做 
3 因爲致命的錯誤使比較操做停止 
4 預置錯誤停止比較 
diskcopy 
0 盤拷貝操做成功 
1 非致命盤讀/寫錯 
2 用戶經過ctrl-c結束拷貝操做 
3 因致命的處理錯誤使盤拷貝停止 
4 預置錯誤阻止拷貝操做 
format 
0 格式化成功 
3 用戶經過ctrl-c停止格式化處理 
4 因致命的處理錯誤使格式化停止 
5 在提示「proceed with format(y/n)?」下用戶鍵入n結束 
xcopy 
0 成功拷貝文件 
1 未找到拷貝文件 
2 用戶經過ctrl-c停止拷貝操做 
4 預置錯誤阻止文件拷貝操做 
5 拷貝過程當中寫盤錯誤 


腳本: 附件test.bat

相關文章
相關標籤/搜索