这可能不是您正在寻找的直接内容,但我有一个类似的任务:运行 ping 并报告成功或失败。我将把提取 IP 地址的工作留给你——你已经完成了。
ping 的问题在于它在名称解析时返回成功,无论数据包丢失还是主机无法访问(将报告 0% 丢失)都无关紧要。
FOR %%a IN (
google.com
a.b.c.d
) DO @FOR /F "delims=" %%p IN (
'PING -w 100 -n 1 %%a ^| findstr ^"Reply Request fail name^"'
) DO @(
ECHO "%%p" | FINDSTR TTL >2 && echo %%a, success, %%p || echo %%a, failed, %%p
) >> Results.csv
逻辑:Ping 一次,只过滤带有所列单词之一的行。如果结果行中存在 TTL(输出到 STDERR 或 NUL 以避免输出污染)回显成功,否则回显失败。
我在英文 Windows 上,必须针对其他语言调整单词。
编辑:
FOR %%a IN (
google.com
a.b.c.d
) DO @FOR /F "delims=" %%p IN ('PING -n 1 %%a ^| findstr TTL ^|^| echo Failed') DO @(
ECHO "%%p" | FINDSTR TTL >2 && (for /f "tokens=3" %%b IN ("%%p") do @echo %%a, %%b) || echo %%a, failed, %%p
)
较少依赖语言,仅适用于 IPv4,添加了 IP 提取。过滤 TTL 的 ping 输出,如果未找到 TTL,则将输出设置为“失败”。如果输出字符串包含 TTL,则提取 IP 并回显主机和 IP,否则回显主机名和输出字符串。