工作中有这样一个场景,需要一台Windows电脑24小时地运行一个程序。
因公司要求,电脑不能连Wi-Fi,只能连交换机出来的网线。但是我们办公室的交换机比较老旧,电脑网络经常断连,导致程序无法正常运行。问题解决起来也简单,重置一下电脑网络就能恢复。但是多次断网出现在晚上,运维很不方便。因此,还是需要一个自动检测断网并重置网络的程序来处理。
百度了一圈,最后采用了cmd脚本+任务计划的方式来实现。
自动重启脚本
脚本大致要实现以下功能:
- 检测当前是否断网;
- 断网时重置网络;不断网时不做任何处理。
检测是否断网
1 | :begin |
通过ping百度来判断是否断网;然后echo返回ping结果。
%errorlevel% == 1
则跳转到reboot
;否则跳转到loop
。
重置网络
1 | :reboot |
通过netsh
命令,设置对应网卡名称(比如我的电脑上叫以太网
)的网卡,先禁用,再启用,然后保留一份重启时间(也可以不保留)。
可以在cmd先测试一下netsh interface set interface "以太网" disabled
和netsh interface set interface "以太网" enabled
两条命令。
⚠️需要cmd右键以管理员方式运行
如果运行失败,可能是你电脑上的网卡名称不为以太网
,可以通过下面这个命令获取网卡名称:
1 | netsh interface show interface |
暂停缓冲
因为实际上允许一定时间的断网,不需要一直ping,所以一次ping成功后,可以暂停一定时间再进行下次ping。
1 | :loop |
通过ping本地ip30秒来实现暂停操作,30秒后重新进入begin
。
创建脚本
将上面的命令整合之后得到如下脚本:
1 | @echo off |
使用win记事本新建txt文件,将上面的内容黏贴进去,然后另存为,将编码改为ANSI。
重命名为net-restart.bat
。系统可能会跳出如下提示:
点击是
即可。
这时,你就得到了一个可以运行的批处理文件。右键文件,以管理员方式运行。
如果服务重启,会将信息打印出来,同时将重启日志追加记录到errorlog.txt内。
目录重定位
errorlog.txt的默认地址是和bat文件同一个地址,但是以管理员方式运行后,默认路径被更改到了,errorlog.txt也被输出在了那里。若要重新改为bat文件的地址,可使用:
1 | cd /D %~dp0 |
此命令将目录cd到当前目录下。可以通过邮件bat文件,点击编辑进行更改:
1 | @echo off |
定时任务
定时任务使用了win自带的任务计划程序
。
在搜索程序中搜索该程序:
打开,在菜单栏选择操作-创建任务。
- 自定义任务的名字,并设置为管理员权限
设置触发条件为开机启动。
设置操作为启动刚刚编辑的bat文件,在浏览里选中bat文件的路径。
关闭长时间执行自动停止
点击确认后,会要求你输入登录密码(因为前面请求了管理员权限)。
完成后可在任务计划程序库里找到刚刚新建的任务,点击任务右键运行即可。程序会在每次开机时自动启用,并且避免了总是要打开终端窗口。