Windows网络无连接自动重启Dr.com

更新

若能直接通过网页登录Dr.com,可以尝试抛弃客户端,使用 多平台自动登录校园网drcom 实现类似的功能。

前言

学校的网络经常断,Dr.com客户端经常断网恢复后无法自动重连,故写了个脚本判断当网络出错时重启Dr.com。

脚本文件

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~0"" h",0)(window.close)&&exit
:begin

set ip=www.baidu.com
set /a counter=0
set /a counter_max=10
:p
timeout /nobreak /t 60 >nul
curl -m 1 -sSfI %ip% > nul
if %errorlevel% EQU 0 (set /a counter=0 & echo Network Available) else (set /a counter+=1 & echo Network Connect Failed)
if %counter% GEQ %counter_max% (taskkill /F /T /im DrMain.exe & timeout /nobreak /t 5 >nul & start /d "C:\Drcom\DrUpdateClient\" DrMain.exe & timeout /nobreak /t 300 >nul) else (echo Failed for %counter%/%counter_max%)
GOTO p

使用方式

使用方法
将上述代码保存成auto_reboot_drcom.bat文件,双击启动即可。

也可将其放置在C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup目录下,使其开机自动启动。

期间可能会导致杀毒软件报错,允许操作即可。

脚本解读

第一段的作用是让脚本获取管理员权限,我从网上抄的,不解释。

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

第二段是让脚本后台运行,若不想让其后台运行,可以删除这三行。

if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~0"" h",0)(window.close)&&exit
:begin

第三段设置三个参数后开始循环:

  • ip:用于检查网络连接的ip地址或域名
  • counter: 错误计数器初始值
  • counter_max: 错误计数器最大值
set ip=www.baidu.com
set /a counter=0
set /a counter_max=5

循环从:p开始到GOTO p结束。

这句的作用是延时60秒,使得每分钟进行一次网络检查。

timeout /nobreak /t 60 >nul

使用 curl 检查网络,若网络连接失败则进行一次计数(counter)若网络连接正常则将计数归零。

curl -m 1 -sSfI %ip% > nul
if %errorlevel% EQU 0 (set /a counter=0 & echo Network Available) else (set /a counter+=1 & echo Network Connect Failed)

本来打算用 ping 来检查网络的, 但是我这的网络设置不允许ping。

ping %IP% -n 1 -w 1000 | find "TTL" >nul
if %errorlevel% EQU 1 (set /a counter+=1 & echo Network Connect Failed) else (set /a counter=0 & echo Network Available)

当计数(counter)大于等于计数上限(counter_max)时,结束DrMain.exe及其子进程,5秒后再启动DrMain.exe,启动后等待300秒(5分钟)(为了保证启动成功)再开始下一个循环。

if %counter% GEQ %counter_max% (taskkill /F /T /im DrMain.exe & timeout /nobreak /t 5 >nul & start /d "C:\Drcom\DrUpdateClient\" DrMain.exe & timeout /nobreak /t 300 >nul) else (echo Failed for %counter%/%counter_max%)

如此一来,当脚本启动时,每60秒检查一次网络,若连续检查了10次都没网,即网络持续中断了10分钟,就会执行重启Dr.com,若网络还没恢复,则每过6(5+1)分钟重启一次Dr.com。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值