[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络连接] [已解决]ping某个不存在的ip,禁用网卡和不禁用,for耗费时间如何保证大致相同?

本帖最后由 ygqiang 于 2018-11-20 19:18 编辑

[已解决]ping某个不存在的ip,禁用网卡和不禁用,for耗费时间如何保证大致相同?

禁用网卡,耗费时间大约是10秒。
不禁用网卡,耗费时间大约60秒。

如何修改代码,保证这2种情况下,for循环,持续耗费时间都是大约60秒或者120秒?
  1. @echo off & setlocal enabledelayedexpansion
  2. set servip1=192.168.32.60
  3. cls
  4. echo %time%
  5. pause
  6. for /l %%m in (1,1,10) do (
  7. ping 127.0.0.1 -n 2 >nul 2>nul
  8. ping !servip1! -n 1
  9. echo !errorlevel!
  10. if !errorlevel! equ 0 goto :neta
  11. echo 外网不通
  12. 1pause
  13. )
  14. echo %time%
  15. echo 外网不通,持续x分钟
  16. pause
  17. cls
  18. :neta
  19. echo 外网通畅
  20. pause
复制代码
下面代码,测试分别是60秒,650秒。
  1. for /l %%m in (1,1,60) do (
  2. ping !servip1! -n 2
  3. echo !errorlevel!
  4. if !errorlevel! equ 0 goto :neta
  5. echo 外网不通
  6. 1pause
  7. )
复制代码

本帖最后由 ygqiang 于 2018-11-20 21:36 编辑

最终解决代码。
  1. @echo off & setlocal enabledelayedexpansion
  2. set servip1=192.168.32.61
  3. cls
  4. echo %time%
  5. 1pause
  6. echo ....................................................>>1.txt
  7. echo %time%>>1.txt
  8. echo ....................................................>>1.txt
  9. set ns=0
  10. rem 显示开始时间
  11. set time1=%time%
  12. echo 当前时间是%time1%
  13. call :time2sec %time1%
  14. set t1=%ns%
  15. 1pause
  16. cls
  17. echo 设置时间间隔(秒)
  18. set timebiao=120
  19. :timnext
  20. for /l %%m in (1,1,2) do (
  21. ping !servip1! -n 1
  22. echo !errorlevel!
  23. if !errorlevel! equ 0 goto :neta
  24. echo 外网不通
  25. 1pause
  26. )
  27. rem 显示结束时间
  28. set time2=%time%
  29. echo 当前时间是%time2%
  30. call :time2sec %time2%
  31. set t2=%ns%
  32. rem 计算时间差
  33. set /a tdiff=%t2%-%t1%
  34. echo 间隔%tdiff%秒>>1.txt
  35. 1pause
  36. if %tdiff% LSS %timebiao% goto :timnext
  37. echo %tdiff%
  38. echo %time%
  39. echo 外网不通,持续x分钟
  40. 1pause
  41. cls
  42. echo =================================>>1.txt
  43. echo =================================>>1.txt
  44. echo =================================>>1.txt
  45. echo =================================>>1.txt
  46. exit
  47. :neta
  48. echo 外网通畅
  49. 1pause
  50. echo =================================>>1.txt
  51. echo okokokokokokokokokokokokokokokoko>>1.txt
  52. echo okokokokokokokokokokokokokokokoko>>1.txt
  53. echo =================================>>1.txt
  54. exit
  55. :time2sec
  56. rem 将时间转换成秒数,保存到ns中
  57. set tt=%1
  58. set hh=%tt:~0,2%
  59. set mm=%tt:~3,2%
  60. set ss=%tt:~6,2%
  61. set /a ns=(%hh%*60+%mm%)*60+%ss%
  62. goto :eof
复制代码

TOP

回复 3# ygqiang

二楼已修改
你的意图是什么真不明白。是否禁用网卡以及引起的时间长短问题,没有考虑过,应该是系统自身的运行机制决定的,不排除有解。不是我能考虑和解决的。
目的,学习批处理

TOP

本帖最后由 ygqiang 于 2018-11-20 16:52 编辑

回复 2# hlzj88


    你好。主要需求是:循环持续ping 60或者120秒,始终ping不通就goto a
如果中间发现ping通了,一般就会持续ping通的,这个就可以马上goto b

关键是:是否禁用网卡,ping耗费的时间还有比较大的差别。

TOP

本帖最后由 hlzj88 于 2018-11-20 17:22 编辑

以前也没有注意过ping不通的时间有多久,刚才试了的确是长些。
你的代码可以这样更少些
  1. @echo off
  2. ping /n 3 192.168.32.60>nul 2>nul&&set p=0&&echo 网通&&goto a || set /a p+=10&&echo 网不通 持续时间%p%秒&&goto b
  3. :a
  4. 你的意图
  5. :b
  6. 你的意图
复制代码
目的,学习批处理

TOP

返回列表