Loops 带有嵌套循环的批处理脚本,用于ping IP范围';s

Loops 带有嵌套循环的批处理脚本,用于ping IP范围';s,loops,batch-file,nested,ping,Loops,Batch File,Nested,Ping,工作1循环代码: for /l %i in (1,1,254) do @ping 131.212.30.%i -n 1 -w 100 | find "Reply" 未运行我尝试使用计数器的代码,因此每次ping得到回复时,我们都会向online添加1: SET online=0 for /L %i in (1,1,254) do for /L %j in (1,1,255) do @ping 131.212.%i.%j -n 1 -w 100 | find "Reply" SET /A onl

工作1循环代码:

for /l %i in (1,1,254) do @ping 131.212.30.%i -n 1 -w 100 | find "Reply"
未运行我尝试使用计数器的代码,因此每次ping得到回复时,我们都会向online添加1:

SET online=0 for /L %i in (1,1,254) do for /L %j in (1,1,255) do @ping 131.212.%i.%j -n 1 -w 100 | find "Reply" SET /A online=online+1

非常感谢。

您的语法有点错误。以下内容应该可以使用(为了可读性,分成几行):

for /l %%i in (1,1,254) do (
  for /l %%j in (1,1,254) do (
    ping 131.212.%%i.%%j -n 1 -w 100 | find "Reply"
  )
)
请记住,ping有很多IP地址

Reply from 146.57.239.18: Destination host unreachable 
无法访问目标,因此您的本地主机(146.57.239.18)会以“无法访问目标主机”进行答复

146.57.239.18不是ping主机,而是您的本地主机

最好搜索
TTL=
而不是
Reply

...
ping 131.212.%%i.%%j -n 1 -w 100 | find "TTL="
...
您的
设置/a online=%online%+1
也不起作用。你会需要的。
set/a online+=1
语法效果更好:

...
ping 131.212.%%i.%%j -n 1 -w 100 | find "TTL=" && SET /A online +=1 || set /a offline +=1
...
因此,整个代码如下所示:

SET online=0 
for /L %%i in (1,1,254) do for /L %%j in (1,1,255) do ping 131.212.%%i.%%j -n 1 -w 100 | find "TTL=" && SET /A online +=1 
echo %online% hosts are online.
编辑更快的解决方案(并行工作):


这就是你想要做的吗@有点像bliziforst,但这并不能真正帮助我理解嵌套循环以及它们最终ping随机IP的原因。谢谢你的时间!
@echo off 
SET online=0 
for /L %%i in (1,1,254) do (
  start /min "pinging" cmd /c "(@for /L %%j in (1,1,255) do @ping 146.254.%%i.%%j -n 1 -w 100 | find "TTL=") >ping%%i.txt"
)

:loop
timeout /t 1 >nul
tasklist /v | find "pinging" && goto :loop
pause

for /f %%i in ('type ping*.txt 2^>nul^|find /c "TTL="') do echo %%i hosts are online
del ping*.txt