从 ping 获取主机名并将结果存储到文本

Get hostnames from ping and store results to text

好的,情况就是这样。我有一个非常大的文本文件,其中包含许多不同的 IP 地址。我想创建一个批处理文件或任何可以完成工作的文件,以便解析这些 IP 地址的所有主机名。

目前,我将 IP 地址每行存储在一个名为 addresses.txt.

的文件中

我还有一个批处理文件,代码如下:

@echo off
for /f "delims=" %%a in (addresses.txt) do ping -a %%a >> PING_LOG.txt && (echo %%a Passed) || (echo %%a Failed)
pause

这似乎工作正常。它用 ping 的所有结果填充我的文本文件;主机名、回复、统计数据、数据包等

问题是: 想要将我 ping 的地址和主机名写入我的输出文件。有什么办法可以做到这一点?通过批处理命令?通过其他方式(例如获取输出文件并 运行 通过其他方式获取信息)?我仍在积极尝试了解我能找出什么,但我们将不胜感激任何帮助。

(最终目标是将主机名和地址并排放置在 excel 电子表格中,考虑到有成千上万的人手动这样做听起来很糟糕)

我的最终解决方案

@echo off
setlocal EnableDelayedExpansion
for /f "tokens=*" %%A in (addresses.txt) do (
    set "_res=%%A"
    for /f "tokens=2" %%B in ('^(nslookup %%A ^) ^| findstr /c:"Name:"') do set "_res=!_res!, %%B"
    echo !_res! >> LOG.txt
    echo !_res!
)
endlocal

感谢 Dmitry 和 Gravity 的帮助^

接下来,我将数据放入电子表格(只有一列)。我编写了一个宏脚本来查看每个单元格,使用逗号作为分隔符将数据拆分为一个字符串数组,然后将每个结果字符串并排放入一列 (ip | name)。

ping ...命令传递给findstr,然后在第二个for循环中解析输出:

@echo off
setlocal EnableDelayedExpansion
for /f "tokens=*" %%A in (addresses.txt) do (
    set "_res=%%A"
    for /f "tokens=2" %%B in ('^(ping -a %%A ^&^& echo --- ok^|^| echo --- failed^) ^| findstr /c:" [" /c:"---"') do set "_res=!_res!, %%B"
    echo !_res!
)
endlocal

对于addresses.txt

8.8.8.8
88.88.77.77

会产生

8.8.8.8, google-public-dns-a.google.com, ok
88.88.77.77, ti0150a400-1603.bb.online.no, failed