如何通过命令行检索ping数据?

时间:2013-08-12 02:59:24

标签: windows command-line ping

在命令行中键入ping时是否可以检索数据输出?

目前,我们通过在命令行中输入ping(IP地址)来检查现有服务器,但仅限于当天开始时。只有在用户通知我们后服务器关闭时,我们才会收到通知。手动操作是连续ping并及时检查它是否断开连接。

一旦命令行声明存在“请求超时”,间歇性连接等,我想创建一些可以发出提示(同时在后台执行连续ping)的内容。这样就不会需要手动检查连接的状态。

1 个答案:

答案 0 :(得分:1)

我意识到这是2个月前被问到的,但它从未被回答过。希望这仍然对某人有用。当然,使用“真正的”编程语言实现起来要容易得多,但有时你需要只使用内置命令的东西。

根据需要通过环境变量进行配置(显示示例)。为了礼貌,如果你不拥有正在ping的服务器,你可能想要使用更长的超时。

    @echo off
    cls
    setlocal enabledelayedexpansion
    REM Configuration:
    set SERVER=google.com
    set TIMEOUT_AFTER_PING_FAIL_SECONDS=5
    set TIMEOUT_AFTER_PING_SUCCEED_SECONDS=10
    set TIMEOUT_AFTER_LINK_DOWN_SECONDS=15
    set DECLARE_LINK_DOWN_FAILS=5

    set CONSECUTIVE_FAIL_COUNT=0
    :Start
    set PING_RESULT=Failure
    for /f "delims=" %%X in ('ping /n 1 %SERVER%') do (
       set TEMPVAR=%%X
       if "Reply from"=="!TEMPVAR:~0,10!" set PING_RESULT=Success
       )
    goto:!PING_RESULT!

    :Success
    echo Ping Succeeded
    set CONSECUTIVE_FAIL_COUNT=0
    call:Sleep %TIMEOUT_AFTER_PING_SUCCEED_SECONDS%
    goto:Start

    :Failure
    set /A CONSECUTIVE_FAIL_COUNT+=1
    echo Ping Failed !CONSECUTIVE_FAIL_COUNT! Time(s)
    if !CONSECUTIVE_FAIL_COUNT!==%DECLARE_LINK_DOWN_FAILS% (call:LinkDownHandler&goto:Start)
    call:Sleep %TIMEOUT_AFTER_PING_FAIL_SECONDS%
    goto:Start

    :Sleep
    REM See http://stackoverflow.com/questions/4317020/windows-batch-sleep
    setlocal
    set /A ITERATIONS=%1+1
    ping -n %ITERATIONS% 127.0.0.1 >nul
    goto:eof

    :LinkDownHandler
    echo Link is Down
    set CONSECUTIVE_FAIL_COUNT=0
    REM Add additional link-down handler actions here
    call:Sleep %TIMEOUT_AFTER_LINK_DOWN_SECONDS%
    goto:eof