batch-file - 如何使用批处理脚本ping多台服务器并返回IP地址和主机名?

标签 batch-file ping

所以我必须使用 仅批量 为了这。基本上,服务器 HOSTNAMES 都列在一个 txt 文件中。我使用以下代码 ping 所有服务器并将其结果显示在 txtfile 中。

For /f %%i in (testservers.txt) do ping -n 1 %%i >>pingtest.txt

以上 ping 所有服务器。现在,我想在单独的文件中输出 IP 地址和主机名称。我怎样才能做到这一点?
我知道我可以运行 for 循环来搜索诸如“TTL”之类的词,然后查找第三个 token (用于 IP)和诸如“PINGING”之类的词用于第二个 token (HOSTNAME)。但我有错误,无法正确显示。我想在不同的文件中输出 IP 和主机名的原因是要列出 DOWN 和 UP 服务器。

帮助将不胜感激。 :)

编辑:只是为了不混淆,想让你们知道有 3 个不同的文件,testservers.txt 中有 HOSTNAMES,pingtest.txt 有 ping 结果,result.txt 将有 IP 和主机名他们当前的状态为 DOWN 或 UP。

最佳答案

好吧,很遗憾您也没有发布自己的代码,以便对其进行更正。
无论如何,这是我自己的解决方案:

@echo off
setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt
>nul copy nul %OUTPUT_FILE%
for /f %%i in (testservers.txt) do (
    set SERVER_ADDRESS=ADDRESS N/A
    for /f "tokens=1,2,3" %%x in ('ping -n 1 %%i ^&^& echo SERVER_IS_UP') do (
        if %%x==Pinging set SERVER_ADDRESS=%%y
        if %%x==Reply set SERVER_ADDRESS=%%z
        if %%x==SERVER_IS_UP (set SERVER_STATE=UP) else (set SERVER_STATE=DOWN)
    )
    echo %%i [!SERVER_ADDRESS::=!] is !SERVER_STATE! >>%OUTPUT_FILE%
)

外循环遍历主机,内循环解析 ping输出。前两个if语句处理 IP 地址解析的两种可能情况:
  • 主机名是主机 IP 地址。
  • 主机 IP 地址可以从其名称解析。

  • 如果无法解析主机 IP 地址,则将该地址设置为“ADDRESS N/A”。

    希望这可以帮助。

    关于batch-file - 如何使用批处理脚本ping多台服务器并返回IP地址和主机名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408673/

    相关文章:

    windows - 如何以适合在文件/文件夹名称中使用的格式在 Windows 命令行上获取当前日期/时间?

    windows - 批处理脚本循环以检查多个参数

    java - 使用正确的 JRE 从批处理文件启动 Java 应用程序

    c# - header 检查 C# 总是 403?

    Java InetAddress.isReachable() 超时

    c++ - 在 exe 中启动的批处理文件不起作用

    Windows 复制命令返回代码?

    batch-file - 如何在批处理文件结果的开头添加时间戳

    linux - iptables 下降长度和 TTL 条件不起作用

    java - JTextArea 的 Apache DefaultExecutor 和 Ping 命令