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

只需在PingDNS下重置ERRORLEVEL即可。
修改后的代码:
  1. @ECHO off
  2. ECHO.提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
  3. setlocal EnableDelayedExpansion
  4. SET "IP1="
  5. SET "IP2="
  6. SET "IP3="
  7. ECHO.请稍等...&ECHO.
  8. CALL :PingDNS 223.5.5.5
  9. CALL :PingDNS 114.114.114.114
  10. CALL :PingDNS 180.76.76.76
  11. CALL :PingDNS 119.29.29.29
  12. CALL :PingDNS 8.8.8.8
  13. ECHO.执行以下命令:
  14. IF defined IP1 echo netsh int ip add dns "WLAN" %IP1% index=1
  15. IF defined IP2 echo netsh int ip add dns "WLAN" %IP2% index=2
  16. IF defined IP3 echo netsh int ip add dns "WLAN" %IP3% index=3
  17. pause
  18. GOTO:EOF
  19. :PingDNS <dnsIP>
  20. set "errorlevel=0"
  21. for /f "tokens=1-9 delims==m " %%a in ('ping -n 4 %~1 ^| find "平均"') do ECHO.%~1 的平均时间:%%fms & SET %~1_time=%%f
  22. REM 对于4次全部丢失的,不显示平均时间,故直接丢弃
  23. IF not %errorlevel%==0 ECHO. %~1 全部丢失!&GOTO:EOF
  24. CALL :CMP %~1
  25. GOTO:EOF
  26. :CMP <IP>
  27. IF not defined IP1 SET "IP1=%~1" & EXIT /B 1
  28. IF not defined IP2 SET "IP2=%~1" & EXIT /B 2
  29. IF not defined IP3 SET "IP3=%~1" & EXIT /B 3
  30. IF !%~1_time! LSS !%IP1%_time! SET "IP3=%IP2%"&SET "IP2=%IP1%"&SET "IP1=%~1"&EXIT /B 1
  31. IF !%~1_time! LSS !%IP2%_time! SET "IP3=%IP2%"&SET "IP2=%~1"&EXIT /B 2
  32. IF !%~1_time! LSS !%IP3%_time! SET "IP3=%~1"&EXIT /B 3
  33. EXIT /B 0
复制代码
效果:
  1. 提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
  2. 请稍等...
  3. 223.5.5.5 的平均时间:18ms
  4. 114.114.114.114 的平均时间:41ms
  5. 180.76.76.76 的平均时间:15ms
  6. 119.29.29.29 的平均时间:15ms
  7. 8.8.8.8 的平均时间:34ms
  8. 执行以下命令:
  9. netsh int ip add dns "WLAN" 119.29.29.29 index=1
  10. netsh int ip add dns "WLAN" 223.5.5.5 index=2
  11. netsh int ip add dns "WLAN" 8.8.8.8 index=3
  12. 请按任意键继续. . .
复制代码
有可能是后面EXIT的时候把ERRORLEVEL搞乱了。

TOP

回复 4# 22123


    我研究了一下,如果IP PING不通的话,
  1. ping -n 4 %~1 ^| find "平均"
复制代码
会返回1,这个正常。但是在for后面,就变成返回0了。

我怀疑这是因为for修改了返回值。

所以,代码需要做整体的修改。建议新开一贴,看看高手们的意见。

TOP

返回列表