65.9K
CodeProject 正在变化。 阅读更多。
Home

解决 Windows 10 WiFi 重连失败的问题

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.09/5 (6投票s)

2018年10月4日

CPOL

4分钟阅读

viewsIcon

6493

计划一个任务来运行此脚本,该脚本会检查 Windows 在启动、睡眠或休眠后是否已重新连接到指定的路由器,如果未连接则尝试连接。

引言

许多升级到 Windows 10 的 Windows 用户发现,他们在启动、睡眠或休眠后,Windows 无法自动重新连接到其 WiFi 路由器。网上有很多可能的解决方案,从运行 chkdsk、确保家庭网络设置为“专用”到更新网络驱动程序、在设备管理器中禁用网络适配器的电源管理,再到关闭“电源选项”中的“快速启动”,其中一个或多个解决方案可能对您有效,因此请先尝试它们。

但是,许多人尝试了所有这些方法却徒劳无功,之后我看到的唯一建议就是彻底重装 Windows,在我看来,这就像因为前门卡住而重建你的房子!所以我决定走一条不同的道路,编写一个批处理脚本来检查家庭 WiFi 路由器是否已连接,如果没有则尝试连接。然后我计划了一个任务,在启动或恢复时运行该脚本。

我希望这篇文章能帮助到其他遇到此问题的人。

要求

运行脚本和计划一个任务需要 Windows 管理员帐户,无论是否有用户登录。如果您没有管理员帐户,您需要与网络管理员联系。

Using the Code

将此代码粘贴到批处理文件中(扩展名为 .bat),并将“HOME-ROUTER”编辑为您自己的路由器 SSID

@ECHO OFF
REM Make up to three attempts to connect to the router
SETLOCAL EnableDelayedExpansion
set LOGFILE=output.txt
call :CHECK >> %LOGFILE%
exit /b

:Check
ECHO ---------------------------------------------
ECHO Start check at %date% %time%
set "myRouter=HOME-ROUTER"
set "host=8.8.8.8"
set counter=1
:WHILE
if !counter! EQU 4 goto :failpoint
ping -n 1 "!host!" | findstr /r /c:"[0-9] *ms"
if !errorlevel! EQU 0 (
  if !counter! EQU 1 (
    REM It's the first pass, so the WiFi is already connected
    ECHO Already connected
  ) else (
    REM It's a subsequent pass, so this script made the connection
    ECHO Connected OK
  )
  goto :exitpoint
) else (
  ECHO Not connected
  ECHO Connection attempt !counter!
  netsh wlan connect !myRouter!
  timeout 5
  set /a counter+=1
  goto :WHILE
)
:failpoint
ECHO Failed three connection attempts
:exitpoint

将文件保存在计算机的某个位置,并通过直接断开 WiFi 并运行批处理文件来测试它,看看它是否能正常重新连接 WiFi。一旦确定它有效,您就可以创建计划任务,在适当的时间运行它。

注释

我使用了 Google 的一个 DNS IP 地址 (8.8.8.8) 作为可靠的主机进行检查,但您也可以使用任何本地设备(例如无线打印机 - 例如 192.168.1.29 或“HP_LaserJetPro”)的 IP 地址或共享名称(如果您知道它将始终可用)。如果您的互联网连接不可靠或按需连接,这可能是更好的选择。

我绝不是 Windows 命令行和/或批处理文件编码方面的专家。我只是在网上找到了一些代码片段后,经过反复琢磨和抓耳挠腮才将这段代码组合在一起。所以它可能不是完成此任务最有效、最健壮或最有效的方法。我一直乐于接受建设性的批评和改进建议。

计划任务

  1. 启动任务计划程序(按 Windows 键 + R 打开运行框,输入 taskschd.msc 并按 Enter)。
  2. 在“操作”窗格中,单击“创建任务…”。
  3. 为任务命名。
    提示在任务名称前加上下划线,以便它们出现在列表的顶部。
  4. 在“安全选项”下,选择“无论用户是否登录都要运行”。
    注意如果您当前没有以管理员帐户登录 Windows,则需要通过单击“更改用户或组…”按钮将用户更改为管理员帐户。
  5. 选中“使用最高权限运行”复选框。
  6. 转到“触发器”选项卡,并添加两个“新建…”触发器。
    1. 系统启动时
      1. 从顶部的下拉列表中选择“在启动时”。
      2. 选中“延迟任务”复选框,并将其设置为“30 秒”。
        这有助于确保 Windows 已启动网络连接所需的相应服务。
      3. 点击**确定**。
    2. 从睡眠或休眠恢复时
      1. 从顶部的下拉列表中选择“按事件”。
      2. 从“日志”下拉列表中选择“系统”。
      3. 从“源”下拉列表中选择“Kernel-Power”。
      4. 在“事件 ID”框中输入“107”。
      5. 选中“延迟任务”复选框,并将其设置为“30 秒”。
        这里的延迟可能不是必需的,但它不会造成任何损害。
      6. 点击**确定**。
  7. 转到“操作”选项卡,并添加此“新建…”操作。
    1. 从“操作”下拉列表中选择“启动程序”。
    2. 在“程序/脚本”框中输入完整路径和脚本名称,或使用“浏览…”按钮找到它。
    3. 在“起始于(可选):”框中,输入希望创建 output.txt 日志文件的路径,即使它与批处理文件在同一路径。否则,它根本不会被创建。
      或者,您可以编辑批处理文件本身中的 LOGFILE 常量,为其提供完整路径。
    4. 点击**确定**。
  8. 转到“条件”选项卡,并取消选中仅当计算机使用交流电源运行时才启动任务”选项。
  9. 点击**确定**。
  10. 出现提示时,请输入所选管理员帐户的密码。

应该就完成了。测试所有重启场景,并确保每次都更新了“output.txt”日志文件。

历史

  • v1.0
© . All rights reserved.