【发布时间】:2026-02-14 19:40:01
【问题描述】:
好的,情况就是这样。我有一个非常大的文本文件,其中包含许多不同的 IP 地址。我想创建一个批处理文件或任何可以完成工作的文件,以便解析这些 IP 地址的所有主机名。
目前,我在名为addresses.txt的文件中每行存储一个IP地址。
我还有一个包含以下代码的批处理文件:
@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 IP 地址不会(通常)为您返回该 IP 地址的主机名。听起来有点像
nslookup功能是你需要的.. 但你说 "... 用所有结果填充我的文件... hostname..." 有些环境中有些人会在ping结果中看到主机名,但我不建议在这里使用它。 -
@gravity:
ping -a通常会这样做。 -
@gravity -a 得到了我需要的信息,但你是对的,nslookup 更好。我完全忘记了这一点。我将尝试使用 nslookup 重写 Dmitry 的解决方案,我将发布我能想到的任何内容。
-
@Stephan - 不幸的是,不在我的盒子上,所以它依赖于环境,因此检索主机名不可靠。 “通常”不是一个好的依赖项。
-
@gravity 我正在 ping 的所有地址都是本地化的,因此它似乎可以始终如一地工作。它只是比 nslookup 慢得多。但是,到目前为止,我不知道如何像使用 ping 一样从中获取结果。
标签: windows batch-file cmd ping