window自动启动脚本

现状

每天早上到公司打开笔记本之后, 总是需要依次打开各种应用, 这种简单无脑的重复操作真是折磨人. 于是某天早上在打开了各种应用之后, 便有了一个想法, 为什么不写一个bat脚本来一键启动所有额应用呢?

可能这里有人会说, 为什么不用开机启动呢?

我只能说, 你们真的不知道开机启动项多了之后, 系统从开机到完全启动完有多慢吗? 而且很多应用可能只是工作的时候才用的上的, 完全没必要开机自动启动. 好吧, 其实还有一点, 我不喜欢太多的开机启动项.

实现

最开始想到的功能很简单, 就是在bat脚本里写下一条一条的启动指令, 依次执行下来.

指令类似下面这样:

start /d "C:\Program Files (x86)\Tencent\WeChat" WeChat.exe
或者
:: 第一个引号标识允许第二个参数中包含空格
start "" "C:\Program Files (x86)\Tencent\WeChat\WeChat.exe"

写完之后本来想试试效果的, 但是当时需要启动的程序都已经开启了, 然后便想到了另外一个需求 — 启动前需要先检查该应用是否已经启动.

于是查找了一下方法:

rem 检测WeChat是否已经启动
tasklist|findstr -i "WeChat.exe"
if ERRORLEVEL 1 (
rem 如果未启动, 则启动WeChat
start /d "C:\Program Files (x86)\Tencent\WeChat" WeChat.exe
)

写完之后发现好像还缺了点什么 — 脚本里面需要启动的应用比较多, 一起跑起来的话, CPU可能会抗不住, 所以需要在每个应用启动之后加上等待时间.

但是Windos并没有自带的sleep, 所以只能通过其他替代方案了.

rem 通过ping指令来实现等待1s的功能.
ping 107.0.0.1 -n 1 > nul

将ping指令和启动指令整合之后如下:

rem 检测WeChat是否已经启动
tasklist|findstr -i "WeChat.exe"
if ERRORLEVEL 1 (
rem 如果未启动, 则启动WeChat并等待1s
start /d "C:\Program Files (x86)\Tencent\WeChat" WeChat.exe & ping 107.0.0.1 -n 1 > nul
)

加上一些打印信息之后, 最终的脚本格式类似如下, 其中每一块对应一个应用, 需要新增应用的话, 只需要增加一块, 替换掉里面的名字和路径等内容即可:

echo start

rem 检测WeChat是否已经启动
echo check WeChat status
tasklist|findstr -i "WeChat.exe"
if ERRORLEVEL 1 (
rem 如果未启动, 则启动WeChat
echo Wechat start
start /d "C:\Program Files (x86)\Tencent\WeChat" WeChat.exe & ping 107.0.0.1 -n 1 > nul
)

rem 检测WeChat Work是否已经启动
echo check WeChat Work status
tasklist|findstr -i "WXWork.exe"
if ERRORLEVEL 1 (
rem 如果未启动, 则启动WeChat Work
echo Wechat Work start
start /d "C:\Program Files (x86)\WXWork" WXWork.exe & ping 107.0.0.1 -n 1 > nul
)

echo finished

问题

在开发的过程中还碰到了一点有意思的事情, 之前写的脚本, 每次一运行, 跑到一半就没了, 错误信息也看不了, 反复检查脚本也没看出有啥问题, 百思不得其解呀. 于是便随口问了一下别人: “bat脚本怎么调试啊?”, 答曰: “命令行下执行脚本就行了呀!”

这本来是很基本的问题, 只是当时死活没想到. 特在此记下.

发表评论

电子邮件地址不会被公开。 必填项已用*标注