只需在PingDNS下重置ERRORLEVEL即可。
修改后的代码:效果:有可能是后面EXIT的时候把ERRORLEVEL搞乱了。
BAT221110 发表于 2022-11-11 07:08 
@BAT221110大大您好,我使用您修改后的脚本 可以正常ping所有ip了, 但还有个问题出现 我附上代码 您帮我再看看
我的问题是:我用2个错误的ip放在ping地址里 一个是ping不通 显示请求超时的ip 8.8.8.88 和地址不存在的 08.8.8.8 来做测试,
结果就是虽然ping不通的8.8.8.88 会当做速度最快的ip 放入到DNS里,而不是丢弃不写入到IP1里. 另一个08.8.8.8也差不多,会显示配置的DNS服务器不正确或不存在, 但会添加到DNS里,因添加错误而留白.
这个问题该如何修正 ? 谢谢!!!
------------------------------------------------------------
□■自动检测DNS速度并设定最佳DNS
正在检测DNS...
阿里: 223.5.5.5 腾讯: 119.29.29.29 114: 114.114.114.114 百度: 180.76.76.76
360: 101.226.4.6 谷歌: 8.8.8.8 Cloudflare: 1.1.1.1
223.5.5.5 的平均时间:5ms
119.29.29.29 的平均时间:10ms
114.114.114.114 的平均时间:14ms
180.76.76.76 的平均时间:12ms
101.226.4.6 的平均时间:13ms
1.1.1.1 的平均时间:200ms
8.8.8.8 的平均时间:70ms
正在设定最佳DNS...
参数错误。
配置的 DNS 服务器不正确或不存在。
IPv4 地址 . . . . . . . . . . . . : 192.168.0.91(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.0.1
DHCP 服务器 . . . . . . . . . . . : 192.168.0.1
DNS 服务器 . . . . . . . . . . . : 8.8.8.88
223.5.5.5
↑ 本机目前DNS
----------------------------------------------------------
请按任意键继续. . .- @ECHO off
- ECHO □■自动检测DNS速度并设定最佳DNS
- REM 获取联网设备名称并重置DNS服务器地址为自动获取(防止之后DNS写入出错)
- for /f tokens^=2^ delims^=^" %%i in ('netsh interface ip show address') do (set "macname=%%i"
- goto:Next)
- :Next
- REM %macname%
- netsh int ip set dns %macname% dhcp >nul
- REM 获取网关(网关可作为首选或备用DNS)
- for /f "tokens=15" %%i in ('ipconfig /all ^| find /i "默认网关" ^| find /i "192"') do set gateway=%%i
- REM %gateway%
- setlocal EnableDelayedExpansion
- SET "IP1="
- SET "IP2="
- SET "IP3="
- ECHO.正在检测DNS...&ECHO.
- echo 阿里: 223.5.5.5 腾讯: 119.29.29.29 114: 114.114.114.114 百度: 180.76.76.76
- echo 360: 101.226.4.6 谷歌: 8.8.8.8 Cloudflare: 1.1.1.1
- echo.
- CALL :PingDNS 1.1.1.1
- CALL :PingDNS 8.8.8.8
- CALL :PingDNS 223.5.5.5
- CALL :PingDNS 119.29.29.29
- CALL :PingDNS 114.114.114.114
- CALL :PingDNS 180.76.76.76
- CALL :PingDNS 101.226.4.6
- CALL :PingDNS 8.8.8.88
- rem CALL :PingDNS %gateway%
- ECHO.正在设定最佳DNS...
- IF defined IP1 netsh int ip add dns %macname% %IP1% index=1
- IF defined IP2 netsh int ip add dns %macname% %IP2% index=2
- IF defined IP3 netsh int ip add dns %macname% %IP3% index=3 &goto:继续2●
- pause
- GOTO:EOF
- :PingDNS <dnsIP>
- set "errorlevel=0"
- for /f "tokens=1-9 delims==m " %%a in ('ping -n 4 %~1 ^| find "平均"') do ECHO.%~1 的平均时间:%%fms & SET %~1_time=%%f
- REM 对于4次全部丢失的,不显示平均时间,故直接丢弃
- IF not %errorlevel%==0 ECHO. %~1 全部丢失!&GOTO:EOF
- CALL :CMP %~1
- GOTO:EOF
- :CMP <IP>
- IF not defined IP1 SET "IP1=%~1" & EXIT /B 1
- IF not defined IP2 SET "IP2=%~1" & EXIT /B 2
- IF not defined IP3 SET "IP3=%~1" & EXIT /B 3
- IF !%~1_time! LSS !%IP1%_time! SET "IP3=%IP2%"&SET "IP2=%IP1%"&SET "IP1=%~1"&EXIT /B 1
- IF !%~1_time! LSS !%IP2%_time! SET "IP3=%IP2%"&SET "IP2=%~1"&EXIT /B 2
- IF !%~1_time! LSS !%IP3%_time! SET "IP3=%~1"&EXIT /B 3
- EXIT /B 0
- :继续2●
- ipconfig /all|findstr "[0-9]*\.[0-9]*\."
- echo ↑ 本机目前DNS
- echo ----------------------------------------------------------
- REM 自动检测DNS速度并设定最佳DNS结束.↓下面可以放其他脚本继续执行......
- pause
复制代码 |