如何检查批处理文件中ping是否响应 [英] How to check if ping responded or not in a batch file

查看:212
本文介绍了如何检查批处理文件中ping是否响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想连续ping一个伺服器,并且当伺服器回应时,看到一个讯息方块,伺服器目前已关闭。我想通过批处理文件。

I want to continuously ping a server and see a message box when ever it responds i.e. server is currently down. I want to do it through batch file.

我可以在这里显示一个消息框从Windows批处理文件显示弹出式窗口/消息框

I can show a message box as said here Show a popup/message box from a Windows batch file

并可以连续ping

ping <servername> -t

但如何检查是否回应?

推荐答案

以下 checklink.cmd 程序是一个很好的开始。它依赖于一个事实,你可以做一个单一的ping,如果成功,输出将包含行:

The following checklink.cmd program is a good place to start. It relies on the fact that you can do a single-shot ping and that, if successful, the output will contain the line:

Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),



提取标记5和7并分别检查它们是Received1,成功。

@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
:loop
set state=down
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr!') do (
    if "x%%a"=="xReceived" if "x%%b"=="x1," set state=up
)
echo.Link is !state!
ping -n 6 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal

使用要测试的名称(或IP地址)调用它:

Call it with the name (or IP address) you want to test:

checklink 127.0.0.1
checklink localhost
checklink nosuchaddress

您的区域设置不是英语,您必须用您区域设置中的相应关键字替换已接收,例如 recibidos 用于西班牙语。

Take into account that, if your locale is not English, you must replace Received with the corresponding keyword in your locale, for example recibidos for Spanish. Do a test ping to discover what keyword is used in your locale.

仅在状态时通知您。 ,您可以使用:

To only notify you when the state changes, you can use:

@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
set oldstate=neither
:loop
set state=down
for /f "tokens=5,7" %%a in ('ping -n 1 !ipaddr!') do (
    if "x%%a"=="xReceived" if "x%%b"=="x1," set state=up
)
if not !state!==!oldstate! (
    echo.Link is !state!
    set oldstate=!state!
)
ping -n 2 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal






因为Gabe在注释中指出,你可以使用 ERRORLEVEL ,使上面第二个脚本的等价物变成:


However, as Gabe points out in a comment, you can just use ERRORLEVEL so the equivalent of that second script above becomes:

@setlocal enableextensions enabledelayedexpansion
@echo off
set ipaddr=%1
set oldstate=neither
:loop
set state=up
ping -n 1 !ipaddr! >nul: 2>nul:
if not !errorlevel!==0 set state=down
if not !state!==!oldstate! (
    echo.Link is !state!
    set oldstate=!state!
)
ping -n 2 127.0.0.1 >nul: 2>nul:
goto :loop
endlocal

这篇关于如何检查批处理文件中ping是否响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆