【问题标题】:用于 ping 并显示不同输出的批处理文件
【发布时间】:2022-01-23 09:20:54
【问题描述】:

我正在尝试创建一个批处理文件来 ping 一些设备以输出显示结果的 .txt。

ping -n 1 router | find "TTL" > nul

IF errorlevel 1 (
echo "Cannot ping" > DIRECTORY
)
ELSE (
echo "Ping success" > DIRECTORY
)

目前我只能显示它是成功还是失败。但是我在想是否有办法区分 如何 它失败了,例如请求超时 VS 主机无法访问。

有谁知道我可以如何调整它?

【问题讨论】:

  • 我将创建一个示例答案,但欢迎您开始reading here
  • 在命令提示符窗口中输入 if /? 并检查您的 if/else 语法...

标签: windows batch-file ping


【解决方案1】:

这是一个未经测试的示例,我现在无法对其进行测试,因为我无法设置任何会产生各种结果的路由,例如来自路由器的Destination host unreachable

@echo off
for /f "delims=" %%i in ('ping -n 2 "<HOST OR IP>" ^| findstr "Reply timed Hardware"') do set "res=%%~i"
if not "%res:timed=%" == "%res%" echo Time out
if not "%res:unreachable=unreachable%" == "%res%" echo Destination host is unreachable & goto :eof
if not "%res:Reply=%" == "%res%" echo Successful ping
if /i not "%res:Hardware=%" == "%res%" echo Hardware Failure

概念很简单,findstr 将仅捕获来自Replytimedhardware 的任何结果。然后我们只测试字符串是否包含子字符串并相应地回显。

列表中用于捕获unreachable 的第二个选项具有&amp; goto :EOF 选项,因为它将仅包含destination host unreachableReply from ... : Destination host unreachable,如下面的屏幕截图所示。我们不想同时为Unreachable 和回复(来自路由器)创建消息。

【讨论】:

  • 嗨。谢谢您的帮助。我正在尝试逐段理解您的代码......所以请纠正我。所以对于第一行......将执行 PING 函数,并将 PING 输出的每一行放入“i”变量并进行处理。那部分我想我明白了,但是 FINDSTR “REPLY TIMED HARDWARE” 是做什么的?还有,SET "RES=%%~i"?这是否将字符串设置为 RES 变量?另外,%RES:TIMED=%" 有什么作用?
  • 很简单。我正在测试 ping 的结果以查找字符串是否包含特定单词,如果包含,我会自定义输出结果。如果您想了解它是如何工作的,请在每个 if 语句之前添加一个 echo 并查看子字符串替换如何使其工作。
  • 哦,拍摄,感谢您的超快速响应!我只是在编辑我的评论。好的,会这样做,然后回来..!
猜你喜欢
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多