Board logo

标题: [网络连接] 【已解决】批处理ping多个IP地址为何跳转出错? [打印本页]

作者: 1275    时间: 2013-5-2 16:02     标题: 【已解决】批处理ping多个IP地址为何跳转出错?

本帖最后由 1275 于 2013-5-5 20:38 编辑

目的是实现在同时Ping通172.19.1.254和192.168.10.1这两个IP地址时才执行后面的goto语句;但是我测试了下下面的命令中即使第一个IP ping不同也会执行后面的goto;不知道错误在哪儿了请帮忙指正,谢谢!
  1. ping /n 1 /w 1 172.19.1.254 >nul | find /i "来自" && ping /n 1 /w 1 192.168.10.1 >nul | find /i "来自" && goto :wangzhi
复制代码
注:因为考虑到ping的结果只有发现“来自”或者“reply”时才为成功Ping通;但是失败却有多种错误,比如“超时”,“目标不可达”等;所以才用上面的方法。
作者: BAT-VBS    时间: 2013-5-2 16:15

请把完整代码贴出来看看
作者: 1275    时间: 2013-5-2 16:17

本帖最后由 1275 于 2013-5-2 16:19 编辑

@echo off
tasklist|find /i "qq.exe" >nul
if "%errorlevel%"=="0" goto open
exit
pen
ping 127.1 -n 6 >nul
echo: 正在开启
@echo off
for /f "skip=4 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v "sLanguage"') do if not "%%a" == "CHS" goto :yingwen

:zhongwen
rem ping /n 1 /w 1 172.19.1.254 >nul | find /i "来自" &&
ping /n 1 /w 1 192.168.10.1 >nul | find /i "来自" && goto :wangzhi

:yingwen
rem ping /n 1 /w 1 172.19.1.254 >nul | find /i "Reply" &&
ping /n 1 /w 1 192.168.10.1 >nul | find /i "Reply" && goto :wangzhi

:wangzhi
start /max iexplore http://www.baidu.com
exit

这是完整代码
如果把rem ping /n 1 /w 1 172.19.1.254 >nul | find /i "Reply" && 中的rem去除,就会报错
作者: xxpinqz    时间: 2013-5-2 16:21

  1. ping /n 1 /w 1 172.19.1.254|find /i "ttl=">nul&&(ping /n 1 /w 1 192.168.10.1|find /i "ttl=">nul&&goto :wangzhi)
复制代码

作者: 1275    时间: 2013-5-2 16:28

xxpinqz 发表于 2013-5-2 16:21


如果多于两个IP地址的话,比如三个、四个也可以这样写么?
作者: xxpinqz    时间: 2013-5-2 16:32

可以,你按那模式一个个写进去就行,你只要记住 () 优先于 | 优先于 &&
执行出错还因为你的>nul放错地方了
作者: Batcher    时间: 2013-5-2 16:36

试试这个
  1. @echo off
  2. tasklist | find /i "qq.exe" >nul && goto open
  3. goto :eof
  4. :open
  5. ping 127.1 -n 6 >nul
  6. echo: 正在开启
  7. for /f "skip=4 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v "sLanguage"') do if not "%%a" == "CHS" goto :yingwen
  8. :zhongwen
  9. ping /n 1 /w 1 172.19.1.254 >nul | find /i "来自" && ping /n 1 /w 1 192.168.10.1 >nul | find /i "来自" && goto :wangzhi
  10. goto :eof
  11. :yingwen
  12. ping /n 1 /w 1 172.19.1.254 >nul | find /i "Reply" && ping /n 1 /w 1 192.168.10.1 >nul | find /i "Reply" && goto :wangzhi
  13. goto :eof
  14. :wangzhi
  15. start /max iexplore http://www.baidu.com
复制代码

作者: 1275    时间: 2013-5-2 16:38

回复 6# xxpinqz
  1. @echo off
  2. tasklist|find /i "qq.exe" >nul
  3. if "%errorlevel%"=="0" goto open
  4. exit
  5. :open
  6. ping 127.1 -n 6 >nul
  7. echo: 正在开启
  8. @echo off
  9. for /f "skip=4 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v "sLanguage"') do if "%%a" == "CHS" goto :zhongwen
  10. :zhongwen
  11. ping /n 1 /w 1 172.19.1.254|find /i "ttl=">nul&&(ping /n 1 /w 1 192.168.10.1|find /i "ttl=">nul&&goto :wangzhi)
  12. :wangzhi
  13. start /max iexplore http://www.baidu.com
  14. exit
复制代码
我试了下还是不行 本身我现在172.19.1.254是Ping不通的 但是192.168.10.1可以Ping通  两个有一个不通就不能执行打开网址的操作
你再帮我看下吧 多谢
作者: xxpinqz    时间: 2013-5-2 16:45

本帖最后由 xxpinqz 于 2013-5-2 16:52 编辑

回复 1275
那个本身就是判断两个都通才执行goto,不通不执行
  1. @echo off
  2. ::两个IP都PING通才打开IE
  3. tasklist|find /i "qq.exe" >nul&&goto open
  4. exit /b
  5. :open
  6. ping 127.1 -n 6 >nul
  7. ping /n 1 /w 1 172.19.1.254|find /i "ttl=">nul&&(ping /n 1 /w 1 192.168.10.1|find /i "ttl=">nul&&start /max iexplore http://www.baidu.com)
复制代码

作者: 1275    时间: 2013-5-2 16:47

回复 7# Batcher
我试了下这样可以成功IE不会开启 但是我把172.19.1.254换成172.19.14.1的IP也就是两个IP都能Ping通时,IE是起不来的不知道为什么代码如下:
  1. @echo off
  2. tasklist | find /i "qq.exe" >nul && goto open
  3. goto :eof
  4. :open
  5. ping 127.1 -n 6 >nul
  6. echo: 正在开启
  7. for /f "skip=4 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v "sLanguage"') do if not "%%a" == "CHS" goto :yingwen
  8. :zhongwen
  9. ping /n 1 /w 1 172.19.14.1 >nul | find /i "来自" && ping /n 1 /w 1 192.168.10.1 >nul | find /i "来自" && goto :wangzhi
  10. goto :eof
  11. :yingwen
  12. ping /n 1 /w 1 172.19.14.1 >nul | find /i "Reply" && ping /n 1 /w 1 192.168.10.1 >nul | find /i "Reply" && goto :wangzhi
  13. goto :eof
  14. :wangzhi
  15. start /max iexplore http://www.baidu.com
复制代码

作者: Batcher    时间: 2013-5-2 16:50

回复 10# 1275


把@echo off和所有的>nul全部删掉
代码保存为C:\test.bat
开始
运行
CMD
C:\test.bat
结果贴出来看看
作者: xxpinqz    时间: 2013-5-2 16:55

你用版主的代码也可以,不过上边都说了>nul你放错位置了。。。。。。你放前面都屏蔽掉了&&后面等于ping出错才执行不是ping成功才执行.
作者: 1275    时间: 2013-5-2 16:59

回复 11# Batcher
  1. 直接结果如下:
  2. F:\Self\Administrator\桌面>tasklist   | find /i "qq.exe"    && goto open
  3. QQ.exe                        4024 Console                    1     85,004 K
  4. F:\Self\Administrator\桌面>ping 127.1 -n 6
  5. 正在 Ping 127.0.0.1 具有 32 字节的数据:
  6. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  7. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  8. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  9. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  10. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  11. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  12. 127.0.0.1 的 Ping 统计信息:
  13.     数据包: 已发送 = 6,已接收 = 6,丢失 = 0 (0% 丢失),
  14. 往返行程的估计时间(以毫秒为单位):
  15.     最短 = 0ms,最长 = 0ms,平均 = 0ms
  16. F:\Self\Administrator\桌面>echo: 正在开启
  17. 正在开启
  18. F:\Self\Administrator\桌面>for /F "skip=4 tokens=3" %a in ('reg query "HKCU\Cont
  19. rol Panel\International" /v "sLanguage"') do if not "%a" == "CHS" goto :yingwen
  20. F:\Self\Administrator\桌面>ping /n 1 /w 1 172.19.14.1    | find /i "来自"   && p
  21. ing /n 1 /w 1 192.168.10.1   | find /i "来自"   && goto :wangzhi
  22. F:\Self\Administrator\桌面>pause
  23. 请按任意键继续. . .
复制代码
执行完后自动退出,为了保存结果我在
ping /n 1 /w 1 172.19.14.1  | find /i "来自" && ping /n 1 /w 1 192.168.10.1 | find /i "来自" && goto :wangzhi
pause
加了个pause的暂停
作者: 1275    时间: 2013-5-2 17:05

回复 9# xxpinqz
把172.19.1.254换成172.19.14.1,两个IP都能Ping通时,也是不执行打开IE的操作;你那边测试可以成功么?
作者: Batcher    时间: 2013-5-2 17:12

回复 13# 1275


试试这个代码
不要双击bat文件,严格按照11楼的方法操作。
  1. tasklist | find /i "qq.exe"  && goto open
  2. goto :eof
  3. :open
  4. ping 127.1 -n 6
  5. echo: 正在开启
  6. for /f "skip=4 tokens=3" %%a in ('reg query "HKCU\Control Panel\International" /v "sLanguage"') do if not "%%a" == "CHS" goto :yingwen
  7. :zhongwen
  8. ping /n 1 /w 1 172.19.14.1
  9. ping /n 1 /w 1 192.168.10.1
  10. ping /n 1 /w 1 172.19.14.1 | find /i "来自" && ping /n 1 /w 1 192.168.10.1 | find /i "来自" && goto :wangzhi
  11. goto :eof
  12. :yingwen
  13. ping /n 1 /w 1 172.19.14.1
  14. ping /n 1 /w 1 192.168.10.1
  15. ping /n 1 /w 1 172.19.14.1 | find /i "Reply" && ping /n 1 /w 1 192.168.10.1 | find /i "Reply" && goto :wangzhi
  16. goto :eof
  17. :wangzhi
  18. start /max iexplore http://www.baidu.com
复制代码

作者: 1275    时间: 2013-5-2 17:16

本帖最后由 1275 于 2013-5-2 17:19 编辑

回复 15# Batcher
执行结果如下:
  1. Microsoft Windows [版本 6.1.7601]
  2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
  3. C:\Users\Administrator>c:\test.bat
  4. C:\Users\Administrator>tasklist   | find /i "qq.exe"    && goto open
  5. QQ.exe                        4024 Console                    1     59,568 K
  6. C:\Users\Administrator>ping 127.1 -n 6
  7. 正在 Ping 127.0.0.1 具有 32 字节的数据:
  8. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  9. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  10. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  11. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  12. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  13. 来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=64
  14. 127.0.0.1 的 Ping 统计信息:
  15.     数据包: 已发送 = 6,已接收 = 6,丢失 = 0 (0% 丢失),
  16. 往返行程的估计时间(以毫秒为单位):
  17.     最短 = 0ms,最长 = 0ms,平均 = 0ms
  18. C:\Users\Administrator>echo: 正在开启
  19. 正在开启
  20. C:\Users\Administrator>for /F "skip=4 tokens=3" %a in ('reg query "HKCU\Control
  21. Panel\International" /v "sLanguage"') do if not "%a" == "CHS" goto :yingwen
  22. C:\Users\Administrator>ping /n 1 /w 1 172.19.14.1
  23. 正在 Ping 172.19.14.1 具有 32 字节的数据:
  24. 请求超时。
  25. 172.19.14.1 的 Ping 统计信息:
  26.     数据包: 已发送 = 1,已接收 = 0,丢失 = 1 (100% 丢失),
  27. C:\Users\Administrator>ping /n 1 /w 1 192.168.10.1
  28. 正在 Ping 192.168.10.1 具有 32 字节的数据:
  29. 来自 192.168.10.1 的回复: 字节=32 时间<1ms TTL=64
  30. 192.168.10.1 的 Ping 统计信息:
  31.     数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失),
  32. 往返行程的估计时间(以毫秒为单位):
  33.     最短 = 0ms,最长 = 0ms,平均 = 0ms
  34. C:\Users\Administrator>ping /n 1 /w 1 172.19.14.1   | find /i "来自"   && ping /
  35. n 1 /w 1 192.168.10.1   | find /i "来自"   && goto :wangzhi
  36. C:\Users\Administrator>goto :eof
  37. C:\Users\Administrator>
复制代码
单独Ping Ip是通的
  1. Microsoft Windows [版本 6.1.7601]
  2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
  3. C:\Users\Administrator>ping 172.19.14.1
  4. 正在 Ping 172.19.14.1 具有 32 字节的数据:
  5. 来自 172.19.14.1 的回复: 字节=32 时间=63ms TTL=255
  6. 来自 172.19.14.1 的回复: 字节=32 时间=525ms TTL=255
  7. 来自 172.19.14.1 的回复: 字节=32 时间=475ms TTL=255
  8. 来自 172.19.14.1 的回复: 字节=32 时间=4ms TTL=255
  9. 172.19.14.1 的 Ping 统计信息:
  10.     数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
  11. 往返行程的估计时间(以毫秒为单位):
  12.     最短 = 4ms,最长 = 525ms,平均 = 266ms
  13. C:\Users\Administrator>
复制代码

作者: Batcher    时间: 2013-5-2 17:28

回复 16# 1275


    把/w 1删掉再试试
作者: 1275    时间: 2013-5-2 17:36

回复 17# Batcher

给力啊 这个参数去掉就完全可以了 难道是因为 w 1的等待时间太短了?
作者: Batcher    时间: 2013-5-2 18:17

回复 18# 1275


    是的




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