使用 Ping 时如何仅将主机名和 IP 导出到 excel 或 csv
When using Ping how can i export only the Hostname and IP to excel or csv
新来的,希望有人可以帮助我解决这个问题。
我有大约 200 个工作站已完成 DHCP 保留,我想对它们全部执行 Ping,return 仅主机名、IP。如果可能超时或失败,那也是一个加号,但不是必需的。
我想先声明我不是程序员。我所做的是创建一个 Bat 文件来执行大量 ping,但我不确定并且无法找到仅导出主机名和 IP 的解决方案。
我四处查看并 google 发现了一些 VB 脚本,但我对这些脚本的了解还不足以满足这种需要。
我希望能够在 excel 中看到与此类似的内容
测试主机名 | 192.168.1.1 | Failed/Timedout/pass
感谢您在这里提供的任何帮助。
这是一个子例程 (:getData
) 以及如何使用它的示例。
没有简单的方法可以在一个 for
循环中获取所有需要的数据(可能以某种方式可行,但不值得麻烦),所以我用两个单独的 ping 解决了这个问题。
localhost
和 google
应该 return 成功,hp
已启动但没有回复 ping
并且 xxxxxxx.zzz
没有存在(还)
@echo off
setlocal
for %%h in (localhost www.google.com www.hp.com xxxxxxx.zzz) do call :getData %%h
goto :eof
:getData
set "ip=unresolved"
set "ms=unreachable"
for /f "tokens=2 delims=[]" %%a in ('ping -4 -n 1 %1') do set "ip=%%a"
for /f "tokens=3 delims==<" %%a in ('ping -4 -n 4 %1^|find "TTL="') do set "ms=%%a"
set "result=%1^|%ip%^|%ms%"
set "result=%result: TTL=%"
set "result=%result:||=|unknown|%
echo %result%
输出:
localhost|127.0.0.1|1ms
www.google.com|172.217.22.100|13ms
www.hp.com|15.73.200.24|unreachable
xxxxxxx.zzz|unresolved|unreachable
正如您提到的,200 台主机需要一段时间。我们可以通过 运行 不同主机同时加速(这是最大的变化,也是最大的效果)。我还将等待时间从标准的 1000 毫秒减少到 200 毫秒,并将 ping 的数量从 4 减少到 2(我不会进一步减少它,因为有时包裹会丢失并导致误报)。同样对于这么多主机,您将使用此方法达到最大行长度。最好将主机名保存在一个文件中(每行一个)(hostnames.txt
):
@echo off
setlocal
if not "%~1" == "" goto :getData
for /f %%h in (hostnames.txt) do start /min "pinging %%~h" /min "%~f0" %%~h
echo waiting for result.csv to fill...
REM because some of the started processes are still running
timeout 5
goto :eof
:getData
set "ip=unresolved"
set "ms=unreachable"
for /f "tokens=2 delims=[]" %%a in ('ping -4 -n 1 -w 200 %~1') do set "ip=%%a"
for /f "tokens=3 delims==<" %%a in ('ping -4 -n 2 -w 200 %~1^|find "TTL="') do set "ms=%%a"
set "result=%~1^|%ip%^|%ms%"
set "result=%result: TTL=%"
echo %result%>>"%~dp0result.csv"
exit
新来的,希望有人可以帮助我解决这个问题。
我有大约 200 个工作站已完成 DHCP 保留,我想对它们全部执行 Ping,return 仅主机名、IP。如果可能超时或失败,那也是一个加号,但不是必需的。
我想先声明我不是程序员。我所做的是创建一个 Bat 文件来执行大量 ping,但我不确定并且无法找到仅导出主机名和 IP 的解决方案。
我四处查看并 google 发现了一些 VB 脚本,但我对这些脚本的了解还不足以满足这种需要。
我希望能够在 excel 中看到与此类似的内容
测试主机名 | 192.168.1.1 | Failed/Timedout/pass
感谢您在这里提供的任何帮助。
这是一个子例程 (:getData
) 以及如何使用它的示例。
没有简单的方法可以在一个 for
循环中获取所有需要的数据(可能以某种方式可行,但不值得麻烦),所以我用两个单独的 ping 解决了这个问题。
localhost
和 google
应该 return 成功,hp
已启动但没有回复 ping
并且 xxxxxxx.zzz
没有存在(还)
@echo off
setlocal
for %%h in (localhost www.google.com www.hp.com xxxxxxx.zzz) do call :getData %%h
goto :eof
:getData
set "ip=unresolved"
set "ms=unreachable"
for /f "tokens=2 delims=[]" %%a in ('ping -4 -n 1 %1') do set "ip=%%a"
for /f "tokens=3 delims==<" %%a in ('ping -4 -n 4 %1^|find "TTL="') do set "ms=%%a"
set "result=%1^|%ip%^|%ms%"
set "result=%result: TTL=%"
set "result=%result:||=|unknown|%
echo %result%
输出:
localhost|127.0.0.1|1ms
www.google.com|172.217.22.100|13ms
www.hp.com|15.73.200.24|unreachable
xxxxxxx.zzz|unresolved|unreachable
正如您提到的,200 台主机需要一段时间。我们可以通过 运行 不同主机同时加速(这是最大的变化,也是最大的效果)。我还将等待时间从标准的 1000 毫秒减少到 200 毫秒,并将 ping 的数量从 4 减少到 2(我不会进一步减少它,因为有时包裹会丢失并导致误报)。同样对于这么多主机,您将使用此方法达到最大行长度。最好将主机名保存在一个文件中(每行一个)(hostnames.txt
):
@echo off
setlocal
if not "%~1" == "" goto :getData
for /f %%h in (hostnames.txt) do start /min "pinging %%~h" /min "%~f0" %%~h
echo waiting for result.csv to fill...
REM because some of the started processes are still running
timeout 5
goto :eof
:getData
set "ip=unresolved"
set "ms=unreachable"
for /f "tokens=2 delims=[]" %%a in ('ping -4 -n 1 -w 200 %~1') do set "ip=%%a"
for /f "tokens=3 delims==<" %%a in ('ping -4 -n 2 -w 200 %~1^|find "TTL="') do set "ms=%%a"
set "result=%~1^|%ip%^|%ms%"
set "result=%result: TTL=%"
echo %result%>>"%~dp0result.csv"
exit