本文目录导读:

我来提供一个网络自动检测和修复的脚本,这是一个适用于 Windows 系统的批处理脚本,能够自动检测网络连接问题并尝试修复。
Windows 网络自动检测修复脚本
@echo off网络自动检测与修复工具
color 0A
echo ========================================
echo 网络自动检测与修复工具 v1.0
echo ========================================
echo.
:: 获取当前时间
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%hour:~1,1%
set logfile=network_log_%date:~0,4%%date:~5,2%%date:~8,2%_%hour%%time:~3,2%%time:~6,2%.txt
echo [%date% %time%] 开始网络检测... > %logfile%
:: 检测网络连接
echo 正在检测网络连接...
ping -n 3 8.8.8.8 >nul 2>&1
if %errorlevel% equ 0 (
echo 网络连接正常!
echo [%date% %time%] 网络连接正常 >> %logfile%
goto :check_dns
) else (
echo [警告] 网络连接异常!
echo [%date% %time%] 网络连接异常 >> %logfile%
goto :fix_network
)
:check_dns
echo 正在检测DNS解析...
ping -n 3 www.baidu.com >nul 2>&1
if %errorlevel% equ 0 (
echo DNS解析正常!
echo [%date% %time%] DNS解析正常 >> %logfile%
echo.
echo 所有检测通过,网络运行正常!
echo [%date% %time%] 所有检测通过 >> %logfile%
goto :end
) else (
echo [警告] DNS解析异常!
echo [%date% %time%] DNS解析异常 >> %logfile%
echo 尝试修复DNS配置...
goto :fix_dns
)
:fix_network
echo.
echo ======== 开始修复网络连接 ========
echo [%date% %time%] 开始修复网络连接 >> %logfile%
:: 1. 释放并更新IP地址
echo [步骤1/5] 释放当前IP地址...
ipconfig /release >> %logfile% 2>&1
timeout /t 2 /nobreak >nul
echo [步骤2/5] 更新IP地址...
ipconfig /renew >> %logfile% 2>&1
timeout /t 3 /nobreak >nul
:: 2. 清空DNS缓存
echo [步骤3/5] 清空DNS缓存...
ipconfig /flushdns >> %logfile% 2>&1
:: 3. 重置Winsock目录
echo [步骤4/5] 重置Winsock...
netsh winsock reset >> %logfile% 2>&1
:: 4. 重置网络适配器
echo [步骤5/5] 重置网络适配器...
netsh int ip reset >> %logfile% 2>&1
echo.
echo [%date% %time%] 修复完成 >> %logfile%
echo 网络修复完成!正在重新检测网络连接...
timeout /t 5 /nobreak >nul
:: 重新检测
ping -n 3 8.8.8.8 >nul 2>&1
if %errorlevel% equ 0 (
echo ✓ 修复成功!网络连接已恢复。
echo [%date% %time%] 修复成功 >> %logfile%
goto :check_dns
) else (
echo ✗ 修复失败,请检查物理连接或联系网络管理员。
echo [%date% %time%] 修复失败 >> %logfile%
goto :end
)
:fix_dns
echo.
echo ======== 修复DNS配置 ========
echo [%date% %time%] 修复DNS配置 >> %logfile%
:: 清空DNS缓存
ipconfig /flushdns >> %logfile% 2>&1
echo ✓ DNS缓存已清空
:: 设置备用DNS(Google DNS)
echo 设置备用DNS服务器...
netsh interface ip set dns "以太网" static 8.8.8.8 primary >> %logfile% 2>&1
netsh interface ip add dns "以太网" 8.8.4.4 index=2 >> %logfile% 2>&1
echo [%date% %time%] DNS配置已修改 >> %logfile%
echo DNS配置已修改,等待生效...
:: 检测DNS修复结果
timeout /t 3 /nobreak >nul
ping -n 3 www.baidu.com >nul 2>&1
if %errorlevel% equ 0 (
echo ✓ DNS修复成功!
) else (
echo ✗ DNS修复失败,建议手动检查网络设置
)
goto :end
:end
echo.
echo ========================================
echo 检测日志已保存至: %logfile%
echo ========================================
echo.
pause
PowerShell 版本(功能更强大)
# 网络自动检测与修复脚本 (PowerShell)
# 保存为 NetworkDiagnostic.ps1
$logFile = "network_diagnostic_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
Write-Host "========================================" -ForegroundColor Cyan
Write-Host " 网络自动检测与修复工具 (PowerShell)" -ForegroundColor Cyan
Write-Host "========================================" -ForegroundColor Cyan
Write-Host ""
function Write-Log {
param([string]$message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $message" | Out-File $logFile -Append
Write-Host $message
}
# 检测网络连接
Write-Log "开始网络检测..."
$pingResult = Test-Connection -ComputerName "8.8.8.8" -Count 3 -Quiet
if ($pingResult) {
Write-Log "✓ 网络连接正常"
# 检测DNS
try {
$dnsResult = [System.Net.Dns]::GetHostEntry("www.baidu.com")
Write-Log "✓ DNS解析正常"
Write-Log "所有检测通过,网络运行正常!"
exit 0
}
catch {
Write-Log "✗ DNS解析异常"
Write-Log "开始修复DNS..."
Fix-DNS
}
}
else {
Write-Log "✗ 网络连接异常"
Write-Log "开始修复网络连接..."
Fix-Network
}
function Fix-Network {
Write-Log "====== 开始修复网络连接 ======"
# 释放IP
Write-Log "释放IP地址..."
ipconfig /release | Out-File $logFile -Append
Start-Sleep -Seconds 2
# 更新IP
Write-Log "更新IP地址..."
ipconfig /renew | Out-File $logFile -Append
Start-Sleep -Seconds 3
# 清空DNS缓存
Write-Log "清空DNS缓存..."
ipconfig /flushdns | Out-File $logFile -Append
# 重置网络
Write-Log "重置网络适配器..."
netsh int ip reset | Out-File $logFile -Append
netsh winsock reset | Out-File $logFile -Append
Write-Log "修复完成,等待网络恢复..."
Start-Sleep -Seconds 5
# 重新检测
$retry = Test-Connection -ComputerName "8.8.8.8" -Count 3 -Quiet
if ($retry) {
Write-Log "✓ 修复成功!网络已恢复"
} else {
Write-Log "✗ 修复失败,建议检查物理连接"
}
}
function Fix-DNS {
Write-Log "====== 修复DNS配置 ======"
# 清空DNS缓存
ipconfig /flushdns | Out-File $logFile -Append
Write-Log "✓ DNS缓存已清空"
# 获取网络适配器名称
$adapter = Get-NetAdapter | Where-Object {$_.Status -eq "Up"} | Select-Object -First 1
if ($adapter) {
# 设置DNS
Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses ("8.8.8.8", "8.8.4.4")
Write-Log "✓ DNS已设置为 Google DNS (8.8.8.8, 8.8.4.4)"
Start-Sleep -Seconds 3
# 验证DNS
try {
[System.Net.Dns]::GetHostEntry("www.baidu.com") | Out-Null
Write-Log "✓ DNS修复成功"
} catch {
Write-Log "✗ DNS修复失败,建议手动检查"
}
} else {
Write-Log "✗ 找不到活动的网络适配器"
}
}
Write-Log ""
Write-Log "诊断日志已保存到: $logFile"
Read-Host "按Enter键退出"
使用方法
批处理版本:
- 将所有代码保存为
fixnetwork.bat - 右键点击 - "以管理员身份运行"
PowerShell版本:
- 保存为
NetworkDiagnostic.ps1 - 以管理员身份运行 PowerShell
- 执行:
Set-ExecutionPolicy RemoteSigned -Force - 执行:
.\NetworkDiagnostic.ps1
脚本功能说明
主要检测内容:
- ✅ Ping外部IP(8.8.8.8)检测网络连通性
- ✅ DNS解析测试
- ✅ 自动释放/更新IP地址
- ✅ 清空DNS缓存
- ✅ 重置网络协议栈
- ✅ 设置备用DNS服务器
修复操作:
- 自动释放并更新IP地址
- 清空DNS解析缓存
- 重置Winsock目录
- 重置网络适配器
- 设置Google公共DNS作为备用
注意事项:
- ⚠️ 需要管理员权限运行
- ⚠️ 部分操作会导致短暂断网
- ⚠️ DNS修改可能需要手动恢复
- 📝 所有操作都会记录到日志文件
这个脚本适合在遇到网络故障时快速诊断和修复常见问题,如果问题持续存在,建议检查物理连接或联系网络管理员。