【熟能生巧】Windows 倒计时脚本
问题引出
工作中习惯使用番茄时间法则,把工作时间切分为40分钟左右的一个个小块然后安排任务。这里用到了倒计时器,一般有几种形式:
- 手机倒计时
- 浏览器插件
- 桌面软件
手机倒计时在静音模式下依然会发出声响,适合在家一个人的时候使用。浏览器插件不会跨窗口弹出提示,适合浏览器使用较多的时候使用。桌面软件是个不错的选择,但是已有的一些软件设计上不够简洁,而且有些还需要付费。
由此,便想到自己写一个简单的倒计时器。
解决思路
在Windows系统下,使用Shell脚本(timer.sh)读取输入时间,并开始倒计时。当时间到时,调用Bat脚本(alert.bat)创建临时VBScript脚本(MessageBox.vbs),跳出弹窗提示,并播放音效。
timer.sh
clear
# get input for minutes
echo -n "Enter countdown minutes and press [ENTER]: "
read minutes
# set default value
if echo "$minutes" | egrep -q '^\-?[0-9]+$'; then
echo "Input is: $minutes."
else
minutes=40
fi
seconds=$minutes*60
# start countdown
for ((i=$seconds;i>0;i--)); do
seconds_remaining=$((i%60))
minutes_remaining=$((i/60))
sleep 1 &
printf "Time Remaining: $minutes_remaining:$seconds_remaining \r"
wait
done
start / alert.bat
clear
alert.bat
:: hide all output messages
@echo off
echo off
:: play sound
set "file=C:\Temp\test-workspace\cmd-timer\ding.mp3"
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
echo Sound.URL = "%file%"
echo Sound.Controls.play
echo do while Sound.currentmedia.duration = 0
echo wscript.sleep 100
echo loop
echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000
) > sound.vbs
start /min sound.vbs
:: show message box
cscript C:\Temp\test-workspace\cmd-timer\MessageBox.vbs > nul
:: delete the sound scipt
del sound.vbs
exit
MessageBox.vbs
messageText = "Time is up!"
MsgBox messageText, vbSystemModal
如何运行
- 设置三个脚本和音效的目录,例子中是放在
C:\Temp\test-workspace\cmd-timer
。 timer.sh
,根据提示输入时间,default是40分钟。