找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 88|回复: 2

清理注册表无效网卡值,查询网卡双工支持,修改为最高链接速度

[复制链接]
发表于 昨天 21:59 | 显示全部楼层 |阅读模式
本帖最后由 窄口牛 于 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 "[0-9][0-9]* "
        ') 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 "^[ ]*[0-9]"
') 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

网卡.rar (2.82 KB, 下载次数: 6)




发表于 昨天 23:04 | 显示全部楼层
这个脚本很实用!之前遇到过换了网卡后注册表残留旧网卡信息导致网络配置混乱的问题。清理无效网卡值和设置双工模式一步到位,省了不少手动排查的时间。提个小建议,如果能把无线网卡也加进去就更全面了。
回复

使用道具 举报

发表于 昨天 23:06 来自手机 | 显示全部楼层
感谢分享辛苦了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-6-4 00:41

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表