当前位置: 首页 > news >正文

Windows 批处理脚本实现WiFi连接状态监控与智能重连

1. 为什么需要WiFi自动重连脚本

在工业自动化测试、设备调试等场景中,PC与设备之间的WiFi连接稳定性至关重要。想象一下这样的场景:你正在通过WiFi连接一台测试仪器进行长时间的数据采集,突然WiFi断开导致数据中断,不仅影响工作效率,还可能造成重要数据丢失。Windows系统自带的自动重连机制并不总是可靠,特别是在设备频繁重启或信号不稳定的环境中。

我曾在调试一台嵌入式设备时,设备每半小时就会自动重启一次。每次重启后都需要手动重新连接WiFi,严重影响测试效率。后来开发了这个批处理脚本后,完全实现了无人值守的自动重连,测试效率提升了近70%。

2. 核心原理与技术实现

2.1 netsh命令的妙用

这个脚本的核心是Windows自带的netsh命令。netsh(Network Shell)是Windows提供的网络配置命令行工具,通过它我们可以:

# 查看当前连接的WiFi接口 netsh WLAN show interfaces # 连接指定WiFi netsh wlan connect ssid=mywifi name=mywifi

脚本通过定时执行netsh WLAN show interfaces命令,配合findStr过滤出目标WiFi名称,从而判断当前连接状态。如果发现连接断开,就立即执行connect命令进行重连。

2.2 批处理脚本的循环检测机制

整个脚本采用了一个简单的无限循环结构:

:mainloop (检测连接状态的命令 && 已连接) || ( # 重连逻辑 set /a try_cnt+=1 netsh wlan connect... ) choice /t 5 /d y /n >nul goto mainloop

这里有几个关键点:

  • choice /t 5实现了5秒的检测间隔
  • try_cnt计数器记录重试次数
  • ||运算符在左侧命令失败时执行右侧命令

3. 完整脚本解析与优化

3.1 基础版本脚本

让我们先看一个最基础的实现版本:

@echo off set wifi_name=mywifi set log_file=wifi.log :mainloop netsh WLAN show interfaces | findStr %wifi_name% >nul && ( echo [%date% %time%] WiFi已连接 >> %log_file% ) || ( echo [%date% %time%] 尝试连接WiFi... >> %log_file% netsh wlan connect ssid=%wifi_name% name=%wifi_name% >> %log_file% ) timeout /t 5 >nul goto mainloop

这个版本已经可以实现基本功能,但存在几个问题:

  1. 没有重试次数限制
  2. 日志记录过于简单
  3. 没有错误处理机制

3.2 增强版脚本

针对上述问题,我优化后的版本增加了以下功能:

@echo off setlocal enabledelayedexpansion :: 配置参数 set wifi_name=mywifi set max_retry=10 set check_interval=10 set log_file=wifi_%date:/=%.log :: 初始化日志 echo [%date% %time%] 脚本启动 >> %log_file% echo 监控WiFi: %wifi_name% >> %log_file% echo 最大重试次数: %max_retry% >> %log_file% echo 检测间隔: %check_interval%秒 >> %log_file% set retry_count=0 :mainloop netsh WLAN show interfaces | findStr %wifi_name% >nul if !errorlevel! equ 0 ( echo [%date% %time%] WiFi连接正常 >> %log_file% set retry_count=0 ) else ( set /a retry_count+=1 echo [%date% %time%] WiFi断开,尝试第!retry_count!次重连 >> %log_file% netsh wlan connect ssid=%wifi_name% name=%wifi_name% >> %log_file% if !errorlevel! neq 0 ( echo [%date% %time%] 连接失败,错误代码: !errorlevel! >> %log_file% ) if !retry_count! geq %max_retry% ( echo [%date% %time%] 达到最大重试次数,退出脚本 >> %log_file% exit /b 1 ) ) timeout /t %check_interval% >nul goto mainloop

这个版本的主要改进:

  1. 增加了最大重试次数限制
  2. 使用更精确的错误码检测
  3. 日志包含更详细的运行时信息
  4. 支持可配置的检测间隔
  5. 使用日期作为日志文件名后缀

4. 高级功能扩展

4.1 多WiFi优先级切换

在某些场景下,设备可能提供多个WiFi热点。我们可以扩展脚本实现智能切换:

:: 定义WiFi优先级列表 set wifi_list=TestDevice1,TestDevice2,OfficeWiFi :check_next_wifi for %%w in (%wifi_list%) do ( netsh WLAN show interfaces | findStr %%w >nul && ( set current_wifi=%%w goto wifi_connected ) ) :: 所有WiFi都不可用时的处理 echo [%date% %time%] 所有WiFi均不可用 >> %log_file% goto reconnect_logic :wifi_connected if not "%current_wifi%"=="%target_wifi%" ( echo [%date% %time%] 切换到备用WiFi: %current_wifi% >> %log_file% set target_wifi=%current_wifi% )

4.2 网络质量监控

除了简单的连接状态,我们还可以监控网络质量:

:check_quality for /f "tokens=3 delims= " %%s in ( 'netsh WLAN show interfaces ^| findStr "信号"' ) do ( set signal_strength=%%s echo [%date% %time%] 信号强度: !signal_strength! >> %log_file% if "!signal_strength!"=="低" ( echo [%date% %time%] 警告:信号质量差 >> %log_file% :: 可以触发报警或其他处理逻辑 ) )

4.3 邮件报警功能

对于无人值守的设备,可以集成邮件报警:

:send_alert set alert_subject=WiFi连接告警 set alert_body=设备%COMPUTERNAME%于%date% %time%失去WiFi连接,已重试%retry_count%次。 :: 使用blat发送邮件 blat -to admin@example.com -subject "%alert_subject%" -body "%alert_body%" if !errorlevel! equ 0 ( echo [%date% %time%] 告警邮件发送成功 >> %log_file% ) else ( echo [%date% %time%] 告警邮件发送失败 >> %log_file% )

5. 实际应用中的经验分享

在工业现场部署这类脚本时,我遇到过几个典型问题及解决方案:

  1. 权限问题:某些操作需要管理员权限。可以通过以下方式自动提权:
:: 检查管理员权限 net session >nul 2>&1 if %errorlevel% neq 0 ( echo 请求管理员权限... mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit exit /b )
  1. 日志文件过大:长期运行的脚本会产生大日志文件。可以添加日志轮转:
:: 检查日志文件大小 for %%F in (%log_file%) do set log_size=%%~zF if %log_size% gtr 1048576 ( echo [%date% %time%] 日志文件超过1MB,执行轮转 >> %log_file% move /y %log_file% %log_file%.bak >nul )
  1. 系统资源占用:长时间运行可能占用资源。可以优化检测间隔:
:: 根据连接状态动态调整检测间隔 if %retry_count% equ 0 ( set check_interval=30 ) else ( set /a check_interval=5*retry_count if !check_interval! gtr 300 set check_interval=300 )
  1. 多网卡环境处理:当设备有多个无线网卡时,需要指定接口:
:: 获取第一个无线网卡名称 for /f "tokens=2 delims=:" %%i in ( 'netsh wlan show interfaces ^| findstr /i "名称"' ) do ( set wifi_interface=%%i goto got_interface ) :got_interface set wifi_interface=%wifi_interface:~1% netsh wlan connect name=%wifi_name% interface="%wifi_interface%"

在实际项目中,这个脚本通常与设备测试框架集成。比如在Python测试脚本中调用:

import subprocess import time def check_wifi_connection(): while True: result = subprocess.run( ['auto_connect_wifi.bat', 'TestDevice'], capture_output=True, text=True ) if "连接成功" in result.stdout: break time.sleep(10)

这种组合方案在自动化测试中特别有用,可以确保测试过程中网络连接始终可用。

http://www.jsqmd.com/news/1134655/

相关文章:

  • macOS Command - xattr:从隔离属性到文件溯源,解锁扩展属性的实战应用
  • 蚁剑入门指南:从零搭建渗透测试环境与Webshell实战连接
  • ResNet 残差块 PyTorch 实现:Identity Block 与 Conv Block 的 3 点核心差异
  • Linux 网卡中断绑定实战:3步隔离CPU与手动设置smp_affinity
  • Windows 11 26H1 离线安装 .NET Framework 3.5:DISM 命令与独立安装器 2 种方案对比
  • Windows 11/10 内置 Administrator 账户启用与关闭:2条命令与3个关键风险点
  • C盘告急?揪出AppData里的“空间刺客”
  • VirtualBox 共享文件夹权限配置:解决 vboxsf 组与 sudo 的 2 种权限方案实测
  • 【Windows】告别乱码:BAT批处理创建中文文件夹的编码实战指南
  • 5步轻松下载加密视频:res-downloader跨平台资源下载工具完全指南
  • Netdata 1.45 集群监控实战:3步配置Streaming,聚合5台服务器数据
  • Linux进程替换实战:execlp与fork组合实现3种并发任务调度模式
  • 下班1小时Day7 | Attention 学习
  • LP5812与PIC18F85K90实现RGB LED动态效果控制
  • CentOS7系统克隆实战:使用Mondo Rescue制作可启动ISO镜像
  • Linux 磁盘扩容实战:fdisk 无损替换分区与 3 步扩容文件系统
  • FileMeta 1.2 + Quicker 动作:为任意文件类型添加备注,3步完成批量管理
  • CentOS 7/8 KVM 实战部署:3步完成基础环境与首个虚拟机创建
  • Ubuntu桌面版安装进阶:从单系统到移动便携式系统的实战指南
  • 终极QMK Toolbox指南:免费开源机械键盘固件刷写神器
  • 银河麒麟V10 SP1 密码策略配置:PAM 模块实战与 8 个关键参数详解
  • Windows下利用WinSCP命令行与计划任务实现自动化文件同步
  • UltraISO 9.6.6.33 制作 Windows 11 启动盘:FAT32 转 NTFS 解决 4GB 文件写入难题
  • OpenAI Realtime API实时语音交互系统深度实践指南
  • 如何快速批量下载音乐歌词:LRCGET完整指南
  • 图像增强实战:从灰度变换到视觉优化
  • 基于Playwright与GPT-4o构建智能Web自动化AI Agent实战
  • CentOS 7 嵌套虚拟化实战:在KVM虚拟机中部署Xen 4.x的3步配置
  • 银河麒麟V10 0710/0711 双版本实测:3 种账户锁定方案与恢复指南
  • SPOOLing 技术实战:Linux 下 CUPS 打印队列的 3 个核心配置与性能调优