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