今天遠程一個客戶,發現他的服務器會不定時自動斷開網絡,導致客戶端連接不了服務端,但是重啟服務以后又恢復正常,初步判斷可能是由于某個系統服務與winpacp有沖突,建議用戶恢復操作系統,他想等晚上再開始操作,今天就只好一直運行個ping,發現timed out就手動重啟服務。我記得if可以利用程序的返回值作為判斷,就幫他寫了這個腳本:
這段命令的作用是,ping 61.152.XX.XX這個IP,如果ping不通則重啟mssql服務,然后繼續ping,如果能夠ping通,還是繼續ping...
我們都知道if是命令行下的一個條件判斷語句,ERRORLEVEL是它的一個參數,翻譯過來就是“錯誤返回碼”的意思,它的作用是判斷前一條命令的錯誤返回值,然后和定義的字符值進行比較,再決定進行什么動作。
格式是這樣:
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 - 大于或等于
如有錯誤,感謝指正。
新聞熱點
疑難解答