
Windows 任务计划程序
Windows 里面有个非常容易被忽视的功能,那就是任务计划程序。
熟悉 Linux 的小伙伴可能会觉得:“不就是一个和 Cron 一样的功能嘛!”当然,先不说有多少人熟悉 Linux 下的 Cron,Windows 的任务计划程序比 Cron 也高级得多,不管从哪个方向考虑,这个功能还是很有必要去熟悉一下的。
目录
缘起
老规矩,先让我扯一会儿闲篇。
高中的时候,班级里的希沃大屏是会定时关机的,不过这个功能强依赖于希沃管家的集控功能。由于我把希沃管家干死了,这个功能也就无法使用了。
结果就是,经常可以看见有同学快晚自习了还在希沃白板上整活。
我作为(非正式的)电教委,肯定是要整治一下这种情况的,尽管我自己有时候玩的也挺嗨的……
于是我发现了任务计划程序,它就像从天而降的天使一般,照亮了我的前路,指引我前往正确的方向……(话说这就是传说中的没活硬整吧,卸完了自己整一个差不多的上去)
那么,中二病先放一边,这个“任务计划程序”到底是什么?
什么是任务计划程序

任务计划程序最早可见于 Windows 95 Plus!,可用于定时执行任务。尽管确实是个不折不扣的老古董,任务计划程序并非一直没有变过,最近一次重构是在 Windows Vista/Server 2008 中,也因此目前能够设置的最低兼容性就是这个版本。
相较于 Linux 里的 Cron,任务计划程序可以控制的项目更多。
它并非是像 Cron 那样,仅仅通过一个计时器来运行一个程序,而是将每个任务分为触发器和操作两个部分。
其中很重要的一个不同是,触发器和操作的数量是任意的!你完全可以实现,在满足某个条件时,执行一系列操作;或是让许多条件都指向同一个操作。
触发器也不仅仅是“*/5 * * * *”这样的东西,而是可以设置成非常复杂的条件,与 Windows 本身的集成度也很好,这一点这里先不展开(不然就真是在水字数了)。而 Linux 下若要实现类似的操作,那就只好寄希望于脚本了。
事实上,任务计划程序的使用率还是挺高的,我们常用的 StartIsBack 开始菜单就依赖于任务计划程序。Microsoft Edge、OneDrive 等也会通过这个功能来定时检查更新。
使用方法
启动任务计划程序
任务计划程序的入口有两个:
- 直接通过“taskschd.msc”打开。
- 在计算机管理中打开。
浏览任务
Windows 的计划任务是树形结构的。
左侧的边栏中可以看到系统上所有的计划任务文件夹。点击一个文件夹后,其中的任务会显示在中间的列表上。列表中会显示任务的名称,运行状态等。
点击任意一项任务,就可以在下方查看任务的具体信息。同时,右侧的侧栏上也会出现编辑、启动等选项。

添加任务
正常情况下我们是可以看到两个添加的选项的:“创建基本任务”和“创建任务”。按照 Windows 管理工具的尿性相想必你已经可以猜出来,前者就是功能少但是用起来更简单的那个。
这里我们跳过前者,直接看完整的流程。
第一页是填写基本信息用的,只有一个地方需要注意,那就是用户登录时运行的选项。这一点和 Linux 不同,Windows 下的任务和登录用户强绑定。单个用户的环境倒也无所谓,不过如果希望实现始终都要运行的话,需要额外准备一个带密码的(管理员)账户,或者为自己设置密码。

原因是 Windows 不允许程序化登录到没有密码的账户,虽然可以改策略,但是改完策略会使得你的电脑人人都可以入侵。

如果你是强迫症用户,那么还需要注意一下任务的名称,创建之后是没法改的。
第二页添加触发器。Windows 下并没有简单的定时器,如果需要实现每隔一段时间执行的效果需要搭配下方的“重复任务间隔”使用。
另外,类似“登录时”的触发器仍然会受到第一页中的选项约束,如果第一页中设置的是“只在用户登录时运行”的话,在这里写“所有用户”是没有用的。

第三页添加操作。可执行文件和运行参数是分开填写的,尽管 Windows 会自动帮你纠正,但为了防止识别失败,还是建议自己写。

另外这里叫“操作”而不是直接叫“运行”是有原因的,尽管已经被弃用,但是你依然可以选择“发送电子邮件”或者“显示消息”。
后面几页正常情况下不用太担心,不过有几个选项比较重要。“允许按需运行任务”一定要开着,不然你没有办法手动测试你的任务。笔记本用户还建议取消勾选“只有在计算机使用交流电源时才启动此任务”。
编辑任务
选中一个任务之后就可以进行修改了。除了改不了名字以外,和创建是差不多的。
如果真的很想很想改名字的话,那么删了重新创建一个吧。
启动、停止任务
需要注意的是,如果任务设置中没有启用“允许按需执行任务的话”,是没有办法手动控制任务的。
选中一个任务后,就可以在右侧的边栏中看到对应的选项了。
计划任务示例
下面给出两个示例,都是我曾经使用过的。
定时关机
当然,Windows 里面有一个十分被人熟知的定时关机,就是下面这个:
shutdown /s /t <秒数>然而,这个命令只能实现在一定时间后关机,而且还是一次性的。
我们要的效果是,在某个时间点后关机,而且是每天如此。用口算时长的方法肯定是行不通了,这时任务计划程序就能派上用场。
命名什么的我就不讲了,直接看触发器怎么写。
众所周知,微软的翻译一直十分难绷,初次打开,可能不知道这些东西都代表什么。如果要设置成每天 18:00 关机,那么可以这样写:

其中“开始”后面的日期,指的是什么时候可以开始触发此触发器,这里保持今天(或者比今天早)即可。
设定好了就是这个效果。

接下来写操作,如果你是直接写了参数在里面那么 Windows 会提示你。

Windows 的 PATH 是全系统可用的,不需要指定绝对路径。

最后保存即可。
如果希望有一个警告,例如提前十五分钟显示通知,那么可以再创建一个计划任务,17:45 执行,操作是 shutdown /s /t 900(900 秒,即 15 分钟)。当然如果只写一个提前 15 分钟的容易被取消,我的建议是在设置警告是同时保留直接关机的任务,别人以为他在第二层,而你在第一层,其实他在地下室,而你在大气层
以管理员身份自启动
默认的自启动方式,也就是你在任务管理器里能看见的那些,是不支持管理员身份的。强行设置以管理员身份运行的话,会导致你看不见这些程序,因为此时该程序和你的会话是没有绑定在一起的。
任务计划程序就可以解决这个问题。
首先是这里,要注意两个地方:
- 勾选“使用最高权限运行”。
- 选择“只在用户登录时运行”。不选择这个选项那么程序的会导致程序和你的会话依然是分离的,还是看不见。

接下来新建触发器,只需要选择“登录时”。

操作里放上你希望开机自启的程序即可。得益于单个任务可以容纳多个操作的特性,你可以同时添加多个自启动程序。后续若希望添加程序,也无需再经过上面的流程,直接编辑任务即可。
结语
我至今也不知道这个“结语”的意义是什么。
我在写这篇文章的时候,总感觉里面有许多文字我十分熟悉,但是搜索之后又发现自己未曾发布过这篇内容,查看了一下草稿才发现,我确实写过……只不过没有发布而已
另外这篇文章是由一点私心在里面的,我最近不知道发什么颠开始学习自然码,这篇文章其实是给我练习双拼用的

