2015-02-24 77 views
0

我能夠運行一個簡單的批處理文件(感謝here),它將ping一個ip,如果成功,它將轉到SUCCESS,如果失敗,它將轉到失敗。CMD - 如何計算批處理文件中失敗的ping數

但是,這適用於持續成功或持續失敗,我希望它指向一個不穩定的連接,並且只有在超過50%(如此,> 5)ping失敗時纔會失敗。有沒有辦法做到這一點?

@echo off 
ECHO Checking connection, please wait... 
PING -n 10 HOST_IP|find "Reply from" > NUL 
IF NOT ERRORLEVEL 1 goto :SUCCESS 
IF  ERRORLEVEL 1 goto :FAILS 

:FAILS 
Echo FAIL! 
@echo off 

:SUCCESS 
Echo Success! 
@echo off 

感謝

+0

不能這樣做。 ping將會阻塞,直到AFTER ping退出後纔會到達'if not'行。你必須在循環中運行單個ping,並在那裏進行統計。 – 2015-02-24 18:42:56

+0

我在想 - 我可以運行ping命令,在末尾使用FIND/F作爲「數據包...」行,提取顯示數據包丟失的令牌,將其放入變量中,然後使用IF結束第一個塊變量> 5轉到... – joshnik 2015-02-24 18:46:16

+0

當然。但是你必須等待所有10個數據包先完成。你不能做一個實時的「我們打了5個丟失的數據包」檢查。 – 2015-02-24 18:51:07

回答

0

對於IPv4可以使用

for /f %%a in (' 
    ping -n 10 www.google.es ^| find /c "TTL=" 
') do if %%a lss 5 (echo Fail) else (echo Sucess) 

,將計算與TTL=串輸出線的數量,這將是目前在到達主機的數據包。

但是IPv6的不包括在其輸出中TTL,所以,我們可以直接檢索損失百分比

for /f "tokens=2 delims=()" %%a in ('ping -n 10 www.google.com' 
) do for /f "tokens=1 delims=%%" %%b in ("%%a" 
) do if %%b gtr 50 (echo Fail) else (echo Sucess) 

爲什麼不使用第二種方法對於這兩個版本?因爲在ipv4 ping中,同一vlan中的非活動計算機不會丟失任何數據包。對於每個發送的數據包,您將從發送它的同一臺機器接收數據包。

有關Ping行爲和批處理文件中的用法,您可以找到更多信息here

相關問題