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

时间:2016-05-25 18:09:24

标签: windows batch-file cmd ping

好的,情况就是这样。我有一个非常大的文本文件,包含许多不同的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)。

1 个答案:

答案 0 :(得分:0)

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