好的,这是情况。 我有一个非常大的文本文件,其中包含许多不同的IP地址。 我想创build一个batch file,或者任何能够完成工作的任务,以便parsing这些IP地址的所有主机名。
目前 ,我的IP地址每行存储一个名为addresses.txt的文件。
我也有以下代码的batch file:
@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电子表格中,考虑到数以千计的人工操作听起来很糟糕)
我的最终解决scheme
@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
感谢德米特里和重力的帮助^
接下来,我把这些数据放到电子表格(只有一列)中。 我写了一个查看每个单元格的macros脚本,使用逗号作为分隔符将数据拆分为一个string数组,然后将每个结果string并排放在一个列中(ip | name)。
将ping ...
命令传给findstr
,然后在第二个循环中解析输出:
@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