今天遠(yuǎn)程一個(gè)客戶,發(fā)現(xiàn)他的服務(wù)器會(huì)不定時(shí)自動(dòng)斷開網(wǎng)絡(luò),導(dǎo)致客戶端連接不了服務(wù)端,但是重啟服務(wù)以后又恢復(fù)正常,初步判斷可能是由于某個(gè)系統(tǒng)服務(wù)與winpacp有沖突,建議用戶恢復(fù)操作系統(tǒng),他想等晚上再開始操作,今天就只好一直運(yùn)行個(gè)ping,發(fā)現(xiàn)timed out就手動(dòng)重啟服務(wù)。我記得if可以利用程序的返回值作為判斷,就幫他寫了這個(gè)腳本:
代碼如下:
@echo off
: p
ping 61.152.XX.XX
IF ERRORLEVEL 1 goto aa
IF ERRORLEVEL 0 goto bb
:aa
echo 正在重啟軟件服務(wù)...
net stop MSSQLSERVER
net start MSSQLSERVER
goto p
:bb
echo 繼續(xù)ping中。。。
goto p
這段命令的作用是,ping 61.152.XX.XX這個(gè)IP,如果ping不通則重啟mssql服務(wù),然后繼續(xù)ping,如果能夠ping通,還是繼續(xù)ping...
我們都知道if是命令行下的一個(gè)條件判斷語句,ERRORLEVEL是它的一個(gè)參數(shù),翻譯過來就是“錯(cuò)誤返回碼”的意思,它的作用是判斷前一條命令的錯(cuò)誤返回值,然后和定義的字符值進(jìn)行比較,再?zèng)Q定進(jìn)行什么動(dòng)作。
格式是這樣:
if ERRORLEVEL nubmer commend
例:if ERRORLEVEL 1 echo 返回值等于1
那么大家就要問了,我怎么獲取到前一個(gè)命令的返回值呢?
方法很簡(jiǎn)單,拿ping來說,我們先運(yùn)行一個(gè)ping 127.0.0.1
運(yùn)行結(jié)果是Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
這時(shí)候我們輸入,echo %errorlevel%,就可以看到返回值是0,
然后我們?cè)趐ing一個(gè)不存在的ip,比如192.192.192.192
ping命令顯示 Request timed out.。
ok,我們?cè)谟胑cho %errorlevel%查一下返回值是多少。
現(xiàn)在變成了1。
你也可以用這個(gè)方法來查詢其他命令的返回值,比如copy、dir等等。
當(dāng)然if ERRORLEVEL對(duì)數(shù)值的比較方法不僅僅限于等于。在微軟的幫助中我們可以看到:
IF %ERRORLEVEL% LEQ 1 goto okay
這里的LEQ表示“小于等于”,全部的比較參數(shù)如下:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
如有錯(cuò)誤,感謝指正。
新聞熱點(diǎn)
疑難解答