清理注册表无效网卡值,查询网卡双工支持,修改为最高链接速度
本帖最后由 窄口牛 于 2026-6-3 22:01 编辑@echo off
Setlocal enabledelayedexpansion
reg query HKU\S-1-5-20>nul || echo;CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs" && cscript //b "%temp%\getadmin.vbs" && exit /b & del "%temp%\getadmin.vbs" /f /q>nul 2>nul
pushd "%CD%"&& CD /D "%~dp0"
del %temp%\temp.txt /s /q>nul 2>nul
del %temp%\guid.txt /s /q>nul 2>nul
for /f "tokens=1-3 delims=}" %%a in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} /f "*连接*" /s^|find "\"') do echo %%a}%%b}>>%temp%\temp.txt
for /l %%a in (1,1,2) do (for /f "tokens=1-3 delims=}" %%a in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\ControlSet00%%a\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318} /f "*连接*" /s^|find "\"') do echo %%a}%%b}>>%temp%\temp.txt)
)
for /f "tokens=1,2 delims==" %%a in ('wmic nic get GUID /value^|findstr "{"') do echo %%b>>%temp%\guid.txt
for /f "delims=" %%a in ('type %temp%\temp.txt^|findstr /v /g:%temp%\guid.txt') do reg delete %%a /f
del %temp%\temp.txt /s /q>nul
del %temp%\guid.txt /s /q>nul
pause>nul
@echo off
Setlocal enabledelayedexpansion
net session >nul 2>&1 || (
echo 正在请求管理员权限...
echo CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs"
cscript //b "%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs" >nul 2>&1
exit /b
)
for /f "delims=" %%v in ('
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}" /s ^|
findstr /i "\\\*SpeedDuplex\\enum" ^|
findstr /v "NdiExt"
') do (
set "enum_path=%%v"
set "adapter_path=!enum_path:\Ndi\Params\*SpeedDuplex\enum=!"
set "adapter_name="
for /f "tokens=2,*" %%A in ('
reg query "!adapter_path!" /v DriverDesc 2^>nul ^| find "REG_SZ"
') do (
set "adapter_name=%%B"
)
if defined adapter_name (
echo [网卡实例] !adapter_path:~-4!
echo [完整名称] !adapter_name!
echo [支持模式]:
for /f "tokens=2,*" %%a in ('
reg query "!enum_path!" ^| findstr /i "* "
') do (
echo %%b
)
echo ========================================
)
)
echo 扫描完成
pause
@echo off
Setlocal enabledelayedexpansion
net session >nul 2>&1 || (
echo 正在请求管理员权限...
echo CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs"
cscript //b "%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs" >nul 2>&1
exit /b
)
set "backup_reg=%temp%\nic_config_%random%.reg"
echo 正在创建注册表备份...
reg export "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}" "%backup_reg%" >nul
:main
for /f "delims=" %%a in ('
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}" /s 2^>nul ^
^| findstr /i /r "\\\*SpeedDuplex$" ^
^| findstr /v "NdiExt"
') do (
call :process_speed_setting "%%a"
)
echo;
echo 操作完成! 备份位置: %backup_reg%
pause
exit /b
:process_speed_setting
set "speed_key=%~1"
set "adapter_path=%~1"
set "adapter_path=!adapter_path:\Ndi\Params\*SpeedDuplex=!"
set "adapter_path=!adapter_path:\Ndi\params\*SpeedDuplex=!"
set "adapter_name=未知网卡"
for /f "tokens=1,2*" %%b in ('
reg query "!adapter_path!" /v DriverDesc 2^>nul ^| findstr /i "REG_SZ"
') do (
set "name_part=%%d"
set "name_part=!name_part: = !" :: 替换制表符为空格
set "adapter_name=%%c !name_part!" :: 合并名称成分
set "adapter_name=!adapter_name:= !" :: 压缩连续空格
)
set "adapter_name=!adapter_name:REG_SZ=!"
set "adapter_name=!adapter_name:=!"
set "adapter_name=!adapter_name: (Microsoft)=!"
set "best_value=0"
set "max_speed=0"
for /f "tokens=1,2*" %%n in ('
reg query "%speed_key%\enum" 2^>nul ^| findstr /r "^[ ]*"
') do (
set "num=%%n"
set "mode=%%p"
if "!mode!"=="自动协商" set "mode=Auto"
if "!mode!"=="自动侦测" set "mode=Auto"
set "speed=0"
for /f "tokens=1,2 delims= " %%a in ("!mode!") do (
if "%%A"=="100Gb" (
set "speed=100000"
set "duplex=%%b"
)
if "%%A"=="50Gb" (
set "speed=50000"
set "duplex=%%b"
)
if "%%A"=="40Gb" (
set "speed=40000"
set "duplex=%%b"
)
if "%%A"=="25Gb" (
set "speed=25000"
set "duplex=%%b"
)
if "%%A"=="10Gb" (
set "speed=10000"
set "duplex=%%b"
)
if "%%A"=="5Gb" (
set "speed=5000"
set "duplex=%%b"
)
if "%%A"=="2.5Gbps" (
set "speed=2500"
set "duplex=%%b"
)
if "%%a"=="1.0" (
set "speed=1000"
set "duplex=%%b"
) else (
set "speed=%%a"
set "duplex=%%b"
)
)
set "speed=!speed:Mbps=!"
set /a "speed=!speed:.=!" 2>nul
if "!duplex!"=="全双工" set /a "priority+=100"
if "!duplex!"=="Full" set /a "priority+=100"
if !priority! gtr !max_speed! (
set "max_speed=!priority!"
set "best_value=!num!"
)
)
if !best_value! gtr 0 (
echo 正在配置: !adapter_name!
reg add "%speed_key%" /v Default /t REG_SZ /d "!best_value!" /f >nul
echo [成功] 已设置默认值: !best_value! (!mode!)
)
set "target=已连接"
set "adapterList="
set "count=0"
echo 正在扫描所有网络适配器...
for /f "tokens=1,2,3,*" %%a in ('netsh interface show interface ^| findstr /i /c:"%target%"') do (
set /a count+=1
set "adapter[!count!]=%%b"
set "desc[!count!]=%%d"
)
if !count! lss 1 (
echo 未找到名称包含 [%target%] 的网络适配器
pause
exit /b
)
echo 找到 !count! 个匹配项:
for /l %%i in (1,1,!count!) do (
echo %%i [名称: !adapter[%%i]!] [描述: !desc[%%i]!]
)
echo.
for /l %%i in (1,1,!count!) do (
echo 正在处理适配器: !adapter[%%i]
echo.
netsh interface set interface "!adapter[%%i]!" disable
if %errorLevel% equ 0 (
echo 已禁用适配器
) else (
echo 禁用失败
pause
exit /b
)
timeout /t 5 /nobreak >nul
netsh interface set interface "!adapter[%%i]!" enable
if %errorLevel% equ 0 (
echo 已重新启用适配器
) else (
echo 启用失败
pause
exit /b
)
)
echo ========================================
exit /b
这个脚本很实用!之前遇到过换了网卡后注册表残留旧网卡信息导致网络配置混乱的问题。清理无效网卡值和设置双工模式一步到位,省了不少手动排查的时间。提个小建议,如果能把无线网卡也加进去就更全面了。 感谢分享辛苦了 谢谢分享 进来学习 无线网卡也加进去就更全面了。 无线网卡也要清理 强大,感谢 这个有用,感谢分享! 强大的工具 感谢大佬,收藏起来 感谢分享!学习了! 这个脚本很实用!之前遇到过换了网卡后注册表残留旧网卡信息导致网络配置混乱的问题。清理无效网卡值和设置双工模式一步到位,省了不少手动排查的时间。提个小建议,如果能把无线网卡也加进去就更全面了 最高链接速度是每個人都要的,感謝分享 本帖最后由 redyear2026 于 2026-6-5 20:57 编辑
千兆有线网卡跑满速肯定要有赖于光猫,路由和网线这条全链路均能支持千兆传输能力,否则优化其中某一环节毫无意义。
千兆有线网卡若被强制挂档最高速,应该要同时调整其上游设备,或路由或光猫的默认设置与之同步。
家用光猫的出厂默认设置均为‘自动协商’,很难被用户修改,而家用路由一般都要外接几个设备,且不一定都是千兆,故也只能采用默认的‘自动协商’,以便与每个外接的下游设备彼此通过‘自动协商’的方式尽可能取得满速,这也应是家用路由默认选择‘自动协商’的底层逻辑吧。
因此,仅当千兆有线网卡的上游设备如路由器全接千兆设备或仅接一个千兆有线网卡,且彼此均锁定千兆网速,才有可能相安无事,实测过这种极限设置与彼此用‘自动协商’所得结果相差很小。
对于一般家用,千兆有线网卡在全链路硬件至少为同级的实况下,保持‘自动协商’的默认设置,应该是比较稳妥周全的选择。 我的网线每天都会不定时的断一下,马上又连上,请问,如何确定是win11的问题还是路由器的问题? 支持 #在这里快速回复#感谢分享辛苦了 进来学习 进来学习学习。 感谢你的分享 学习了,感谢 谢谢分享实用脚本 谢谢分享,感谢 感谢分享辛苦了 这是一个很好的剧本。感谢您的分享 谢谢楼主分享 谢谢楼主分享
页:
[1]
