标题: [网络连接] 求助批处理自动检测DNS并设定最佳DNS的代码 这段代码出现问题 [打印本页]
作者: 22123 时间: 2022-11-11 06:12 标题: 求助批处理自动检测DNS并设定最佳DNS的代码 这段代码出现问题
新人小白求助各位大大 本人之前求助 得到论坛@Echo11大大的一段 自动检测DNS并设定最佳DNS的代码,目前遇到个问题
就是这段代码执行后,除了第一个ip显示正常,接下去的几个ip检测都会失败,显示全部丢失.最终只会添加第一个正常的ip到dns中.
好像是这句【IF not %errorlevel%==0 ECHO.%~1 全部丢失!&GOTO:EOF】有问题?还是怎么回事 哪位大大能帮助下 改正确?谢谢了
还有CALL: pingDNS 8.8.8.88是我做ping不通测试的ip 貌似这个ip ping不通不会显示 全部丢失!要放第一个位置 还会自动被加入到主DNS 相当于ping不通的ip会加入到dns里
我希望是比如有6个ip 各ping 4次 只要有ip的ping包 丢失大于1次就不把 这个ip 写入到dns .但其他ip正确能4次都ping通的,不丢包的ip按照ms最快的排序 依次加入到 "WLAN"中,而不是有一个ip错误就全都放弃
代码如下↓ 求助大大们能帮我修正下这个问题 谢谢 - @ECHO off
- ECHO.提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
- setlocal EnableDelayedExpansion
- SET "IP1="
- SET "IP2="
- SET "IP3="
- ECHO.请稍等...&ECHO.
- CALL :PingDNS 223.5.5.5
- CALL :PingDNS 114.114.114.114
- CALL :PingDNS 180.76.76.76
- CALL :PingDNS 119.29.29.29
- CALL :PingDNS 8.8.8.8
- ECHO.执行以下命令:
- IF defined IP1 netsh int ip add dns "WLAN" %IP1% index=1
- IF defined IP2 netsh int ip add dns "WLAN" %IP2% index=2
- IF defined IP3 netsh int ip add dns "WLAN" %IP3% index=3
- pause
- GOTO:EOF
-
- :PingDNS <dnsIP>
- 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
复制代码
作者: BAT221110 时间: 2022-11-11 07:08
本帖最后由 BAT221110 于 2022-11-11 07:09 编辑
只需在PingDNS下重置ERRORLEVEL即可。
修改后的代码:- @ECHO off
- ECHO.提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
- setlocal EnableDelayedExpansion
- SET "IP1="
- SET "IP2="
- SET "IP3="
- ECHO.请稍等...&ECHO.
- CALL :PingDNS 223.5.5.5
- CALL :PingDNS 114.114.114.114
- CALL :PingDNS 180.76.76.76
- CALL :PingDNS 119.29.29.29
- CALL :PingDNS 8.8.8.8
- ECHO.执行以下命令:
- IF defined IP1 echo netsh int ip add dns "WLAN" %IP1% index=1
- IF defined IP2 echo netsh int ip add dns "WLAN" %IP2% index=2
- IF defined IP3 echo netsh int ip add dns "WLAN" %IP3% index=3
- 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
复制代码
效果:- 提示:netsh 需要管理员权限,请以管理员权限运行本脚本.
- 请稍等...
-
- 223.5.5.5 的平均时间:18ms
- 114.114.114.114 的平均时间:41ms
- 180.76.76.76 的平均时间:15ms
- 119.29.29.29 的平均时间:15ms
- 8.8.8.8 的平均时间:34ms
- 执行以下命令:
- netsh int ip add dns "WLAN" 119.29.29.29 index=1
- netsh int ip add dns "WLAN" 223.5.5.5 index=2
- netsh int ip add dns "WLAN" 8.8.8.8 index=3
- 请按任意键继续. . .
复制代码
有可能是后面EXIT的时候把ERRORLEVEL搞乱了。
作者: 22123 时间: 2022-11-11 08:35
本帖最后由 22123 于 2022-11-11 14:01 编辑
谢谢大大 貌似还是有点问题
ping不通的ip 不会过滤掉 而且会以默认速度最高加到首选dns里
作者: 22123 时间: 2022-11-11 10:01
只需在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
复制代码
作者: BAT221110 时间: 2022-11-11 18:57
回复 4# 22123
我研究了一下,如果IP PING不通的话,- ping -n 4 %~1 ^| find "平均"
复制代码
会返回1,这个正常。但是在for后面,就变成返回0了。
我怀疑这是因为for修改了返回值。
所以,代码需要做整体的修改。建议新开一贴,看看高手们的意见。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |