日常工作中,很多小伙伴会用到定时脚本完成重复工作,我也不例外------编写了一个自动抓取某网站数据的脚本,设定每天早上6点自动执行,这样早上9点上班后就能直接使用抓取好的数据,节省大量手动操作时间。
但实际运行一段时间后发现,每天6点这个时间段,家中/办公环境的WiFi经常出现不稳定、自动掉线的情况,导致数据抓取脚本因网络中断无法正常执行。每次上班后还需要重新手动运行脚本,不仅没节省时间,反而增加了工作量。
为了解决这个WiFi掉线导致的脚本执行失败问题,经过摸索,整理出一套"WiFi自动重连+Windows定时任务调度"的完整解决方案,无需安装额外软件,利用系统自带工具和简单脚本就能实现,确保抓取脚本每天准时、稳定执行,在此分享给有同样需求的小伙伴。
一、WiFi自动重连脚本(bat文件)
首先,我们需要一个能自动断开当前WiFi、重新连接指定WiFi的批处理脚本,文件名命名为connectWifi.bat,脚本内容简洁易懂,可直接复制使用,只需替换其中的WiFi名称即可。
bat
:: 关闭批处理命令在执行过程中的回显(避免运行时弹出多余命令)
@echo off
:: 断开当前连接的所有无线网络(确保重新连接的是目标WiFi)
netsh wlan disconnect
:: 显示计算机上保存的所有无线网络配置文件(可用于核对目标WiFi名称是否正确)
netsh wlan show profiles
:: 连接到指定的无线网络,需将ssid和name后的内容替换为你的实际WiFi名称
:: 注意:ssid和name必须与你保存的WiFi配置文件名称完全一致(区分大小写)
netsh wlan connect ssid=MIFI-B1A1 name=MIFI-B1A1
:: 可选:查看WiFi接口状态,确认是否连接成功(可根据需求删除)
netsh wlan show interfaces
脚本使用说明
-
将脚本中的
MIFI-B1A1替换为你需要连接的WiFi名称(可通过脚本中netsh wlan show profiles命令查看已保存的WiFi名称); -
保存脚本时,选择"保存类型"为"所有文件",编码设为"ANSI",避免中文注释乱码;
-
双击脚本可手动测试,运行后查看网络连接状态,确认是否能成功连接目标WiFi。
二、Windows定时任务配置(核心步骤)
脚本编写完成后,我们需要通过Windows自带的"任务计划程序",设置在每天6点(数据抓取脚本执行时间)之前自动运行该bat脚本,确保抓取脚本启动时,WiFi已正常连接。以下是完整操作步骤,新手可一步步跟着来。
步骤1:打开任务计划程序
有两种便捷打开方式,任选其一即可:
-
方式1:按下
Win+R键,输入taskschd.msc,回车即可打开; -
方式2:按下
Win+S键,搜索"任务计划程序",点击搜索结果即可打开。
步骤2:创建基本任务(新手推荐)
-
打开任务计划程序后,点击右侧"创建基本任务",弹出任务名称设置窗口;
-
输入任务名称(如"每日6点前自动连接WiFi"),可补充描述(如"用于解决WiFi掉线问题,确保数据抓取脚本正常执行"),点击"下一步";
-
触发条件设置:选择"每天",点击"下一步",设置"开始时间"(建议比数据抓取脚本提前5-10分钟,如5:55),日期默认当前日期,勾选"每天",点击"下一步";
-
操作设置:选择"启动程序",点击"下一步";
-
程序或脚本设置:点击"浏览",找到之前保存的
connectWifi.bat脚本文件,选中后点击"下一步"; -
完成设置:勾选"当单击'完成'时,打开此任务属性的对话框"(方便后续调整权限,避免脚本无法执行),点击"完成"。
步骤3:权限与条件调整(关键!避免执行失败)
完成基本任务创建后,会自动弹出该任务的属性对话框,重点调整以下2个选项卡:
-
常规选项卡:
-
勾选"不管用户是否登录都要运行"(确保电脑锁屏/未登录时,任务也能正常执行);
-
勾选"使用最高权限运行"(避免权限不足,导致脚本无法执行WiFi连接命令);
-
"配置为"选择当前系统版本(如Windows 11),默认即可。
-
-
条件选项卡:
-
取消勾选"只有在计算机使用交流电源时才启动此任务"(如果是笔记本,避免电池供电时任务不执行);
-
其他选项默认即可,点击"确定"保存设置。
-
步骤4:测试任务(确保脚本能正常运行)
任务创建完成后,建议立即测试,避免后续出现问题:
-
在任务计划程序的"任务计划程序库"中,找到创建好的任务;
-
点击右侧"运行",手动触发任务执行;
-
查看网络连接状态,确认是否能成功连接目标WiFi;
-
若任务执行失败,可点击右侧"历史记录"查看错误原因(若历史记录为空,点击右侧"启用所有任务历史记录"即可)。
三、特殊场景处理(脚本执行失败的解决方案)
上述方法适用于大多数场景,但有些时候,由于系统权限限制、多用户环境等问题,脚本可能无法正常执行,以下补充2种常见特殊场景的解决方法。
场景1:脚本需要管理员身份运行(上述方法无效时)
如果发现定时任务执行后,WiFi没有重新连接,且历史记录提示"权限不足",可通过PowerShell命令,以管理员身份启动bat脚本,具体命令如下:
powershell
# 使用 Start-Process 以管理员身份启动 cmd,并传入指定的 bat 文件路径
# 替换"bat文件路径"为你的connectWifi.bat脚本实际路径(如D:\scripts\connectWifi.bat)
Start-Process cmd -Verb RunAs -ArgumentList '/c bat文件路径'
使用方法:将上述命令复制到记事本,保存为runWifiReconnect.ps1(PowerShell脚本),然后在定时任务中,将"启动程序"改为启动该PowerShell脚本即可。
场景2:脚本需要其他用户身份运行(多用户环境)
如果你的电脑有多个用户,且数据抓取脚本需要以特定用户身份运行,可通过以下PowerShell代码,指定用户身份启动bat脚本,代码包含详细注释,可直接替换占位符使用。
powershell
# 1. 将明文密码转换为安全字符串(替换"密码"为目标用户的登录密码)
$secpasswd = ConvertTo-SecureString "密码" -AsPlainText -Force
# 解释:ConvertTo-SecureString 用于将普通明文转换为安全字符串,-Force 强制转换(明文密码不安全,建议定期更换)
# 2. 创建用户凭据对象(替换"用户名"为目标用户的登录名)
$mycreds = New-Object System.Management.Automation.PSCredential ("用户名", $secpasswd)
# 解释:创建包含用户名和安全密码的凭据,用于后续启动进程时验证身份
# 3. 以指定凭据启动cmd,执行bat脚本(替换"bat文件路径"为实际路径)
Start-Process cmd -Credential $mycreds -ArgumentList "/c bat文件路径"
# 解释:/c 表示执行完bat脚本后,自动关闭cmd窗口
补充:批处理中调用PowerShell(无需单独运行ps1脚本)
上述PowerShell代码无法直接放在bat脚本中运行,但可通过在bat脚本中调用PowerShell,间接实现指定用户运行,完整bat代码示例如下(替换占位符即可):
bat
@echo off
# 调用PowerShell执行指定用户启动命令,替换"密码""用户名""bat文件路径"为实际内容
powershell -Command "$secpasswd = ConvertTo-SecureString '密码' -AsPlainText -Force; $mycreds = New-Object System.Management.Automation.PSCredential ('用户名', $secpasswd); Start-Process cmd -Credential $mycreds -Verb RunAs -ArgumentList '/c bat文件路径(你的命令)'"
四、常见问题排查(避坑指南)
-
问题1:脚本双击能运行,定时任务执行失败?
解决:检查任务属性是否勾选"使用最高权限运行""不管用户是否登录都要运行",重新调整后测试。
-
问题2:PowerShell脚本运行提示"File cannot be loaded because running scripts is disabled on this system"?
解决:以管理员身份打开PowerShell,执行命令
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser,输入Y确认更改,解除脚本执行限制。 -
问题3:WiFi连接失败,脚本运行无反应?
解决:核对脚本中WiFi名称(ssid和name)是否与实际一致,可通过
netsh wlan show profiles命令重新核对;同时检查WiFi是否正常(手动连接测试)。 -
问题4:定时任务历史记录为空?
解决:点击任务计划程序右侧"启用所有任务历史记录",重启任务后即可查看执行日志。
五、总结
整个解决方案的核心逻辑的是:定时任务提前触发WiFi自动重连脚本 → 确保数据抓取脚本执行时网络通畅,全程无需人工干预,完美解决WiFi掉线导致的定时脚本执行失败问题。
方案的优势在于:无需安装第三方软件,利用Windows自带的任务计划程序和简单脚本实现,操作简单、稳定可靠,不仅适用于数据抓取脚本,也适用于其他需要定时执行、依赖网络的场景(如定时备份、定时同步数据等)。
如果大家在使用过程中遇到其他问题,或者有更优的解决方案,欢迎在评论区留言交流,共同进步!