【熟能生巧】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分钟。
posted @ 2018-09-12 13:52  MaxStack  阅读(859)  评论(0编辑  收藏  举报