【Tool】Windows 计划任务 + VBScript 弹窗提醒:从零到一的完整指南

Windows 计划任务 + VBScript 弹窗提醒:从零到一的完整指南

场景:每周五 09:50 自动弹窗,提醒自己执行一周工作总结。不依赖任何第三方软件,Windows 自带能力实现。


一、最终效果

每周五 09:50,电脑自动弹出提醒框:

复制代码

60 秒不操作自动关闭,不挡屏幕。前提只有一个:电脑开机。


二、原理总览

复制代码
 Windows 任务计划程序(系统常驻服务)
     │  到点(每周五 09:50)
     ▼
 启动 wscript.exe(Windows 脚本宿主)
     │
     ▼
 解释执行 reminder.vbs
     │
     ▼
 调用 WScript.Shell.Popup → 原生弹窗

三个角色各司其职:

角色 是什么 干什么
任务计划程序 Windows 常驻服务(services.msc 可查) 负责"到点执行",是触发引擎
wscript.exe Windows 脚本宿主(WSH) 解释执行 .vbs 脚本
WScript.Shell.Popup WSH 内置对象方法 弹原生 MessageBox

这套方案不依赖任何应用,只依赖 Windows 自身------所以哪怕其他软件都没开,提醒照样弹。


三、第一步:写弹窗脚本(.vbs)

3.1 最小可用版

复制代码
 Set objShell = CreateObject("WScript.Shell")
 objShell.Popup "跑周五任务", 60, "周五任务提醒", 64

Popup 方法四个参数:

参数 含义 说明
strText 显示的文字 支持 vbCrLf 换行
nSecondsToWait 自动关闭秒数 0 = 永不自动关闭,只能手动点
strTitle 标题栏文字 可选
nType 图标 + 按钮组合 64 = ⓘ 信息图标 + 确定按钮;48 = ⚠ 警告;16 = ✖ 错误

3.2 多行 + 图标版本

复制代码
 Set objShell = CreateObject("WScript.Shell")
 objShell.Popup "周五任务提醒:" & vbCrLf & vbCrLf & _
     "『跑周五任务』" & vbCrLf & _
     "(自动汇总本周日报 / 工作日志)", _
     60, "周五任务提醒", 64

⚠️ 3.3 编码坑(必看)

VBS 文件必须保存为 GBK/ANSI 编码,不能存 UTF-8!

Windows 的脚本宿主按系统 ANSI 代码页(中文系统 = GBK)解析 .vbs 文件。存成 UTF-8 时,中文字节会被误解,轻则乱码,重则语法报错、脚本直接失败。

复制代码
 ❌ UTF-8 保存 → wscript 报错 / 弹窗不出现
 ✅ GBK 保存   → 正常

转换方法(Linux/Mac 或 Git-Bash 环境):

复制代码
 iconv -f UTF-8 -t GBK reminder_utf8.vbs > reminder.vbs

或 Python:

复制代码
 with open("reminder_utf8.vbs", encoding="utf-8") as f:
     s = f.read()
 with open("reminder.vbs", "w", encoding="gbk") as f:
     f.write(s)

四、第二步:注册计划任务(schtasks)

4.1 创建

复制代码
 schtasks /create \
   /tn "friday_reminder" \          # 任务名称(唯一标识)
   /tr 'wscript.exe "E:\scripts\reminder.vbs"' \  # 到点执行的命令
   /sc weekly \                     # 频率:每周
   /d FRI \                         # 星期几:周五(MON/TUE/WED/THU/FRI/SAT/SUN)
   /st 09:50 \                      # 时间:09:50(24 小时制)
   /f                               # 已存在同名任务则强制覆盖

参数速查:

参数 含义 示例
/tn 任务名 friday_reminder
/tr 要执行的程序 + 参数 wscript.exe "路径"
/sc 频率 weekly 周 / daily 日 / monthly 月 / once 一次
/d 配合 weekly 指定星期 FRIMON......
/st 开始时间 09:50
/f 强制覆盖同名任务 ---
/ru 以哪个用户运行(默认当前用户) 一般不用

常用变体:

复制代码
 # 每天 09:00
 schtasks /create /tn "daily_task" /tr "..." /sc daily /st 09:00 /f
 ​
 # 每月 1 号 10:00
 schtasks /create /tn "monthly_task" /tr "..." /sc monthly /d 1 /st 10:00 /f
 ​
 # 一次性(今天 15:00)
 schtasks /create /tn "once_task" /tr "..." /sc once /st 15:00 /f

4.2 查看

复制代码
 # 简单确认
 schtasks /query /tn "friday_reminder"
 ​
 # 详细信息
 schtasks /query /tn "friday_reminder" /v /fo list
 ​
 # 看下次运行时间(XML 里最可靠)
 schtasks /query /tn "friday_reminder" /xml | grep StartBoundary

4.3 删除

复制代码
 schtasks /delete /tn "friday_reminder" /f

/f = 不询问直接删。

4.4 修改

schtasks 没有"编辑"命令------先删再建 ,或直接覆盖创建(/f):

复制代码
 # 改时间为 10:00(带 /f 直接覆盖)
 schtasks /create /tn "friday_reminder" /tr "..." /sc weekly /d FRI /st 10:00 /f

五、图形界面管理(可选)

不喜欢命令行?Windows 提供了完整图形界面:

  1. Win+R 输入 taskschd.msc 回车

  2. 左侧点击「任务计划程序库

  3. 列表中找到你的任务(如 friday_reminder

  4. 右键可进行:运行 (立即测试)、禁用 (暂停)、删除属性(改时间、改命令)

图形界面的"创建任务"就是 schtasks 的可视化版本,二者操作同一个任务库。


六、常见问题排查

Q1:到点了没弹窗?

按顺序排查:

  1. 电脑当时开机了吗? 关机/睡眠 = 不执行(计划任务没有"补跑"机制)

  2. 用户是否处于登录状态? 默认任务只在用户登录会话中运行

  3. 手动测试:图形界面右键任务 →「运行」,或用 schtasks /run /tn "friday_reminder" 立即触发

  4. 查看上次运行结果:图形界面「上次运行结果」列,0 = 成功,非 0 去查错误码

Q2:弹窗一闪而过 / 中文乱码?

VBS 编码问题------文件必须是 GBK。见 3.3 节。

Q3:想验证脚本本身对不对?

复制代码
 # 立即触发一次(不等到点)
 schtasks /run /tn "friday_reminder"

Q4:弹窗挡住了屏幕怎么办?

Popup 第 2 个参数就是自动关闭秒数:60 = 60 秒后自动消失。设为 0 则必须手动点。

Q5:任务在,但显示"上次运行结果 0x1"?

0x1 = 被调用的程序返回非零退出码。用 cscript //nologo reminder.vbs(控制台版脚本宿主)直接跑一遍,能看到具体报错信息。


七、完整示例(可直接复制)

reminder.vbs(保存为 GBK 编码):

复制代码
 ' 周五任务提醒:到点弹窗,60 秒自动关闭
 Set objShell = CreateObject("WScript.Shell")
 objShell.Popup "周五任务提醒:" & vbCrLf & vbCrLf & _
     "『跑周五任务』" & vbCrLf & _
     "(自动汇总本周日报 / 工作日志)", _
     60, "周五任务提醒", 64

注册命令(cmd 或 Git-Bash 均可):

复制代码
 schtasks /create /tn "friday_reminder" /tr 'wscript.exe "E:\scripts\reminder.vbs"' /sc weekly /d FRI /st 09:50 /f

验证

复制代码
 schtasks /query /tn "friday_reminder"

八、扩展思路

掌握了这套组合,能做的事远不止提醒:

场景 做法
开机自动启动程序 /sc onlogon(登录时触发)
定时清理临时文件 VBS 里写 FileSystemObject 删文件
定时备份文件夹 VBS 调 xcopy 或 PowerShell
定时发邮件/消息 VBS 里调用 HTTP 请求(XMLHttp)
电脑开机自启脚本 /sc onstart(系统启动时触发,需管理员权限)

记住核心公式任务计划程序(定时) + 脚本宿主(干活) = Windows 自动化。定时交给 schtasks,干活交给 VBS/PowerShell,两者组合就是一台小型自动化服务器。


写作背景:本教程源于为"每周五工作总结提醒"落地的一次实践,踩过 VBS 编码的坑,特此记录。

相关推荐
2601_962201722 小时前
Java进阶,集合,Colllection,常见数据结构
java·数据结构·windows
loong_XL3 小时前
Windows WSL2 Ubuntu 搭建 Xvfb 虚拟桌面环境,完美支持多 Agent 隔离
linux·windows·ubuntu
DogDaoDao12 小时前
Windows 开发提效工具全景指南:60+ 工具的工程化分层配置
windows·git·程序员·开发工具·powershell·everything·msys2
水饺编程17 小时前
第5章,[Win32 章节] :Polygon 函数和多边形填充模式
c语言·c++·windows·visual studio
百事牛科技17 小时前
文档不想再加密了?Word打开密码移除的两种方法
windows·word
软件资深者20 小时前
千千静听典藏修复版 使用教程:经典本地音乐播放器回归,歌词同步、皮肤皮肤自由换,音乐播放器怀旧新手 5 分钟上手(2026)
windows
captain37620 小时前
文件与IO(2)
java·开发语言·windows·java-ee
星栖与芯1 天前
# STM32MP157+LiteOS-M GCC极简工程:启动源码适配+Windows Make终极避坑
windows·stm32·单片机
AI视觉网奇1 天前
图片转矢量图 算法总结
windows