Board logo

标题: [网络连接] [已解决]批处理如何通过ping命令来确认局域网某个网段中的故障机器? [打印本页]

作者: yongtianjian    时间: 2015-7-11 11:45     标题: [已解决]批处理如何通过ping命令来确认局域网某个网段中的故障机器?

如题,假设网段10.7.1.1-10.7.1.254  有254个设备接在多个交换机上、

想通过批处理的方式,依次遍历,并返回超时或者无法ping通的机器的信息,汇总到 D:\123.txt
作者: flyinnet9    时间: 2015-7-11 11:57

本帖最后由 flyinnet9 于 2015-7-11 18:28 编辑
  1. @echo off
  2. chcp 437
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (1,1,254) do (
  5. ping 10.7.1.%%a >pinglog.txt
  6. For /f "skip=2 tokens=4 delims=: " %%i In ('find "statistics" pinglog.txt') Do set IP=%%i
  7. For /f "skip=2 tokens=4,7,11 delims=,( " %%j In ('find "Lost" pinglog.txt') Do set Sent=%%j&set Received=%%k&set Lost=%%l
  8. For /f "skip=2 tokens=3,6,9 delims=, " %%m In ('find "Average" pinglog.txt') Do set Minimum=%%m&set Maximum=%%n&set Average=%%o
  9. For /f "tokens=3" %%y in ('find /c "Request timed out" pinglog.txt') do set Count=%%y
  10. if !Count! neq 0 echo TIME OUT IPAddress=!IP! Sent=!Sent! Received=!Received! Lost=!Lost! Minimum=!Minimum! Maximum=!Maximum! Average=!Average>>d:\123.txt
  11. findstr /c:"Destination host unreachable" pinglog.txt && echo Unreachable IPAddress=!IP! Sent=!Sent! Received=!Received! Lost=!Lost!>>d:\123.txt
  12. )
  13. del /q pinglog.txt
复制代码

作者: /zhqsystem/zhq    时间: 2015-7-12 00:59

  1. @echo off
  2. for /l %%i in (1,1,254) do (
  3. ping "10.7.1.%%i"|findstr "无法访问目标主机 如果是非中文系统语言自行转换">nul&&echo=网络异常IP:10.7.1.%%i
  4. )
  5. pause
复制代码

作者: yongtianjian    时间: 2015-7-13 07:49

回复 2# flyinnet9


亲,这个程序走到一半,会一直卡住啊,没有跳转的
作者: yongtianjian    时间: 2015-7-13 08:05

回复 3# /zhqsystem/zhq


您的代码没有执行。。。。
作者: flyinnet9    时间: 2015-7-13 13:07

本帖最后由 flyinnet9 于 2015-7-13 13:08 编辑

回复 4# yongtianjian


   测试没问题,在192.168.1段测了5个IP,结果如下
TIME OUT IPAddress=192.168.1.1 Sent=4 Received=3 Lost=25% Minimum=218ms Maximum=1270ms Average=842ms
Unreachable IPAddress=192.168.1.4 Sent=4 Received=4 Lost=0%
Unreachable IPAddress=192.168.1.5 Sent=4 Received=4 Lost=0%


你截屏吧第一行加rem,然后执行截屏看看
作者: kingshui    时间: 2015-7-13 15:02

本帖最后由 kingshui 于 2015-7-13 15:04 编辑

其实ping的命令写多几个参数的话速度会快很多。
另外 find “TTL” 这样来判断的话中英文系统通用。
如:
  1. for /l %%i in (1,1,254) do ping -n 1 -l 1 -f -w 1 -4 110.7.1.%%i|find "TTL">nul || echo 110.7.1.%%i 网络故障>>error.txt
复制代码

作者: /zhqsystem/zhq    时间: 2015-7-13 22:11

回复 5# yongtianjian
7楼的代码很好,用他的吧

我的那个代码没有太大问题,没有删除搜索内说明信息,没有加入"返回超时"但是判断丢包的话就很难判断了

如果实在太多可以编写两个一个递增一个递减这样会比之前快很多,如果还觉得慢就编写255个一键调用(如果电脑垃圾别这么弄)
作者: ygqiang    时间: 2015-7-14 07:56

其实ping的命令写多几个参数的话速度会快很多。
另外 find “TTL” 这样来判断的话中英文系统通用。
如:
kingshui 发表于 2015-7-13 15:02



    多谢。。。如果换成在线机器检测。。。

这个代码应该如何修改?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2