Windows 定时任务与自动化调度生成器
这是什么
把"我想让它每天/每周/开机时自动做某件事"变成真正跑起来的定时任务。
Windows 上做定时自动化有三条路,各有适用场景。本 skill 根据用户的技术水平和需求复杂度,选最合适的一条并给出完整可复制的命令/脚本:
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| schtasks 命令 | 简单定时、一次配好 | 系统原生、无需装东西、稳定 | 命令行参数绕 |
| PowerShell 注册脚本 | 需要复杂触发器/条件 | 表达能力强、可复用 | 需执行权限 |
| Python 调度器 | 跨平台、逻辑复杂、需要日志 | 灵活可控、易调试 | 需常驻进程 |
何时使用
- "每天晚上 10 点自动备份我的工作文件夹"
- "每周一早上自动清理下载文件夹里超过 30 天的文件"
- "开机后自动启动我的某个工具"
- "每隔 2 小时自动执行一次同步"
- "定时弹出提醒让我休息/喝水"
核心工作流
第 1 步:明确三要素
| 要素 | 说明 | 示例 |
|---|---|---|
| 做什么 | 具体动作(命令/脚本路径) | 备份 D:\工作 到 E:\备份 |
| 什么时候 | 触发时机 | 每天 22:00 |
| 以什么身份 | 是否需管理员权限 | 普通用户即可 |
第 2 步:选方案并生成
- 简单定时 → 生成
schtasks /create命令(首选,最稳) - 复杂条件(如"仅当空闲时""仅当插电时")→ PowerShell
Register-ScheduledTask - 需要日志/重试/复杂逻辑 →
scripts/scheduler.py常驻调度器
第 3 步:给完整生命周期命令
不只给创建命令,必须同时给:
schtasks /query /tn "任务名" # 查询状态
schtasks /run /tn "任务名" # 立即测试执行
schtasks /change /tn "任务名" /disable # 暂停
schtasks /delete /tn "任务名" /f # 删除
第 4 步:排错清单
任务没按时跑,按此顺序排查(详见下方"常见问题")。
schtasks 速查
# 每天 22:00 执行备份脚本
schtasks /create /tn "每日备份" /tr "python D:\scripts\backup.py" /sc daily /st 22:00 /f
# 每周一 09:00
schtasks /create /tn "周一清理" /tr "python D:\scripts\clean.py" /sc weekly /d MON /st 09:00 /f
# 开机时运行(延迟30秒)
schtasks /create /tn "开机启动" /tr "D:\tools\myapp.exe" /sc onstart /delay 0000:30 /f
# 每 2 小时一次
schtasks /create /tn "双小时同步" /tr "python D:\scripts\sync.py" /sc hourly /mo 2 /f
# 登录时运行
schtasks /create /tn "登录执行" /tr "python D:\scripts\run.py" /sc onlogon /f
关键参数:
- /tn 任务名 / /tr 要运行的命令 / /sc 频率(daily/weekly/hourly/onstart/onlogon/once)
- /st 开始时间 / /mo 间隔倍数 / /d 星期(MON/TUE/...) / /f 强制覆盖
- /ru 运行账户 / /rp 密码(管理员权限时需)
Python 调度器(复杂场景)
scripts/scheduler.py 提供常驻调度,适合需要日志记录、失败重试、任务依赖的场景:
# 配置示例
JOBS = [
{"name": "每日备份", "type": "daily", "at": "22:00", "cmd": "python backup.py",
"retry": 2, "log": "logs/backup.log"},
{"name": "每小时检查", "type": "interval", "minutes": 60, "cmd": "python check.py"},
]
启动:python scheduler.py(常驻);或配合上面 schtasks 实现"开机自启调度器"。
常见问题排查清单
| 现象 | 原因 | 解决 |
|---|---|---|
| 任务显示"就绪"但没执行 | 触发器时间已过/错过计划 | 勾选"如果错过计划,尽快运行" |
| 脚本手动能跑,任务里不行 | 工作目录/环境变量不同 | 用绝对路径;在命令前加 cd /d "目录" && |
| 提示"拒绝访问" | 权限不足 | 以管理员运行 cmd;或加 /ru /rp 显式指定账户 |
| 任务一闪而过 | 脚本报错立即退出 | 脚本末尾加 pause;或重定向输出到日志排查 |
| 中文路径乱码 | 编码问题 | 脚本保存为 UTF-8;命令用 chcp 65001 |
安全边界(必须遵守)
- ✅ 只创建用户自己明确要求的定时任务,任务名清晰可辨(如"每日备份")
- ✅ 创建的任务必须是用户可理解、可删除的,必须提供删除命令
- ❌ 不做:修改/禁用/删除系统关键任务(如 Windows Update、杀毒软件任务)
- ❌ 不做:创建隐蔽的开机自启持久化(隐藏任务名、无描述、伪装成系统任务)
- ❌ 不做:用定时任务执行任何未授权的外部操作
输出规范
- 方案选择理由(为什么选 schtasks / PowerShell / Python)
- 完整可复制命令(创建 + 查询 + 测试 + 删除 四件套)
- 验证方法(如何确认任务真的会跑:
schtasks /run立即测试) - 排错提示(针对用户环境的具体注意事项)
示例
> 用户:我想每天晚上 10 点自动备份 D 盘工作文件夹到 E 盘
正确输出:
1. 选 schtasks(简单定时,系统原生最稳)
2. 给创建命令 + 配套备份脚本
3. 给查询/测试/删除命令
4. 提醒:E 盘需存在、路径用绝对路径、首次立即测试一次