batch-file - Grep 批量 ping

标签 batch-file cmd grep ping findstr

寻找更好的方法来做到这一点,而不是我习惯的“手动”方法,因为这是一个我必须定期经历的过程。

我有一系列要 ping 的 IP,从 10.0.1.1510.0.50.15。第三个八位位组指的是物理位置,最后一个八位位组指的是该位置处的设备。我需要查看哪些位置没有该设备连接到网络。

我当前的解决方案是:

FOR /L %i IN (1,1,50) DO ping -n 1 10.0.%i.15 >> C:\path\to\output\file.txt

这给了我类似的输出

Pinging 10.0.1.15 with 32 bytes of data:
Reply from 10.0.1.15: bytes=32 time=68ms TTL=255

Ping statistics for 10.0.1.15:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 68ms, Maximum = 68ms, Average = 68ms

Pinging 10.0.2.15 with 32 bytes of data:
Request timed out.

Ping statistics for 10.0.2.15:
    Packets: Sent = 1, Received = 0, Lost = 1 (100% loss),
...

我更喜欢输出更像:

2
...

但老实说,任何人类可读的内容都很好——这不会通过管道传输到任何地方。

在本例中,位置 1 有设备,但位置 2 没有。

目前,我对此的最佳解决方案是手动查看该文件并进行跟踪。我可以用 Python 将一些东西组合在一起,但这听起来比它的值(value)更麻烦。我知道 grep 有一定的能力来显示上下文,但我使用的是 Windows,除了基本的 NT CLI 工具之外无法访问任何东西。

是否有某种方法可以利用 findstr (或等)来获得更容易人类可读的输出?有没有更好的方法,例如Powershell?

最佳答案

当然。您可以使用 find (或 findstr 如果您愿意)来测试 "TTL" "TTL="(编辑:请参阅下面 MC ND 的评论)并使用生成的 ERRORLEVEL 来确定成功或失败。

@echo off
setlocal

for /L %%I in (1,1,50) do (
    ping -n 1 10.0.%%I.15 | find /i "TTL=" >NUL && (
        echo 10.0.%%I.15: Online
    ) || (
        echo 10.0.%%I.15: OFFLINE
    )
)

See this page有关条件执行的更多信息(&&|| 内容)。 find 在成功时将 ERRORLEVEL 设置为 0,在失败时设置为 1。如果您希望将结果记录到 txt 文件而不是控制台,只需将整个内容包装在另一个括号代码块中,如下所示:

@echo off
setlocal

set "logfile=C:\path\to\output\file.txt"

>> "%logfile%" (
    for /L %%I in (1,1,50) do (
        ping -n 1 10.0.%%I.15 | find /i "TTL=" >NUL && (
            echo 10.0.%%I.15: Online
        ) || (
            echo 10.0.%%I.15: OFFLINE
        )
    )
)

type "%logfile%"

关于batch-file - Grep 批量 ping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27787016/

相关文章:

regex - Grep - 使用 get "Match"到带有 .* 的文本文件末尾不工作

linux - Grep 用于 http 而不是 https

windows - 如何创建行为类似于 .cmd/.bat 的文件扩展名?

powershell - 如何使用PowerShell以管理员身份运行带有参数的程序

powershell - 在 PowerShell 或批处理中格式化日志文件

windows - Windows命令行中的mget命令 FTP客户端不下载文件

java - 关于java编译

grep - 使用 grep 搜索标签

batch-file - 如何在批处理文件中将vbs保存在多行中的一个命令

azure - 如何在 Azure 启动任务批处理文件中检测暂存环境