For loop 批ping计算机名称列表并将结果写入文件
下面的代码会将计算机名和ip地址写入文件,但我希望它也会将无法ping的计算机名写入文件,旁边是fail。我不知道如何修改批处理文件来实现这一点For loop 批ping计算机名称列表并将结果写入文件,for-loop,batch-file,ping,For Loop,Batch File,Ping,下面的代码会将计算机名和ip地址写入文件,但我希望它也会将无法ping的计算机名写入文件,旁边是fail。我不知道如何修改批处理文件来实现这一点 @echo off Echo Pinging list... set ComputerList=list.txt Echo Computername,IP Address>Final.csv setlocal enabledelayedexpansion for /f "usebackq tokens=*" %%A in ("%Compu
@echo off
Echo Pinging list...
set ComputerList=list.txt
Echo Computername,IP Address>Final.csv
setlocal enabledelayedexpansion
for /f "usebackq tokens=*" %%A in ("%ComputerList%") do (
for /f "tokens=3" %%B in ('ping -n 1 -l 1 %%A ^|findstr Reply') do (
set IPadd=%%B
echo %%A,!IPadd:~0, -1!>>Results.csv
))
pause
如果找不到“Reply”,您可以使用
findstr
设置的errorlevel替换返回字符串:
('ping -n 1 -l 1 %%A ^|findstr Reply ^|^| echo Not found Failed:')
其中,|
(此处转义是因为与^
的上下文)表示仅在上一个命令失败时执行
作为旁注,您应该注意,ping
消息依赖于系统语言(它们被翻译为操作系统语言),因此作为成功指示器的“回复”仅适用于英语版本 这可能不是您想要的,但我有一个类似的任务:运行ping并报告成功或失败。我将把提取IP地址留给您,因为您已经这样做了
ping的问题是,它在名称解析时返回success,无论数据包丢失还是主机无法访问(将报告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以避免输出污染),则echo成功,否则echo失败
我在英语视窗上,单词必须调整以适应其他语言
编辑:
较少依赖于语言,仅适用于IPv4,添加了IP提取。
筛选TTL的ping输出,如果未找到TTL,则将输出设置为“失败”。
如果输出字符串包含TTL,则提取IP和回显主机和IP,否则回显主机名和输出字符串
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
)