Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 批ping计算机名称列表并将结果写入文件_For Loop_Batch File_Ping - Fatal编程技术网

For loop 批ping计算机名称列表并将结果写入文件

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

下面的代码会将计算机名和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 ("%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
     )