在命令行中键入ping时是否可以检索数据输出?
目前,我们通过在命令行中输入ping(IP地址)来检查现有服务器,但仅限于当天开始时。只有在用户通知我们后服务器关闭时,我们才会收到通知。手动操作是连续ping并及时检查它是否断开连接。
一旦命令行声明存在“请求超时”,间歇性连接等,我想创建一些可以发出提示(同时在后台执行连续ping)的内容。这样就不会需要手动检查连接的状态。
答案 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