前言

计划任务程序是一个极为强大而且方便的工具,在日常工作生活中,有时会需要在电脑上定时或者每隔一段时间运行某个任务,在Windows系统中,可以通过任务计划程序来实现定时或者事件触发运行事务,例如登录时打开浏览器或者每天早上10点启动PhotoShop甚至每隔4小时清理一次回收站等等。

除了像上图这样手动设置任务计划外,还可以通过CMD窗口中运行schtasks,通过命令行对任务计划进行管理,更可以远程控制网络中其他电脑的任务计划(当然,前提是有该电脑Administrator权限的账户及密码)。因此,本文就详细介绍一下schtasks命令的基本用法 。

 

创建任务

创建任务的命令行是schtasks /create,后方再加上其他参数,比较常用的参数如下:

  • /sc    计划任务类型,可选值为MINUTE、HOURLY、DAILY、WEEKLY、ONCE、ONSTART、ONLOGON、ONIDLE、MONTHLY、ONEVENT
  • /tn    计划任务名称,后续查询、修改、删除、执行时使用
  • /tr    需要运行的程序或命令,传入的命令中间如果有空格会被截断为程序和参数,因此需要将双引号转义并传入。
  • /ru    运行任务的用户账户名,不使用此参数的话使用执行schtasks命令的账户运行计划任务
  • /rp    运行任务的用户账户密码
  • /mo    指定任务在计划类型中的运行间隔
  • /d    指定任务在一个月或者星期的某一天运行,只适用于MONTHLY和WEEKLY类型。
  • /m    指定任务在某个月运行,只适用于MONTHLY类型。
  • /i    当计划任务类型为ONIDLE时,运行任务前计算机处于空闲状态的分钟数。
  • st    当计划任务类型为MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY时使用,指定任务的开始时间,默认为本地计算机的当前时间。
  • /ri    指定计划任务的重复间隔,以分钟为单位。不适合计划类型:MINUTE、HOURLY、ONSTART、ONLOGON、ONIDLE
  • /et    指定计划任务的结束时间,适用于计划类型:MINUTE、HOURLY, 在指定的结束时间之后,schtasks 不会再次启动任务,除非当前系统时间调回开始时间。默认情况下,没有结束时间。
  • /du    指定任务计划的持续时间,与/et类似,默认情况下没有持续时间。
  • /k    在指定计划任务的结束时间或持续时间后停止任务,如果不加此参数,则在时间到了会继续运行或者重启该任务。
  • /it    只在用户登录时运行
  • /z    在任务计划完成后删除任务计划
  • /f    在创建任务时如果任务已存在不显示警告

 

示例

每隔20分钟运行一次

schtasks /create /sc minute /mo 20 /tn TestScript /tr C:\scripts\test.vbs

每隔100分钟,在下午5点运行一次,上午8点前停止。

schtasks /create /tn TestScript /tr test.vbs /sc minute /mo 100 /st 17:00 /et 08:00 /k

从2020年12月31日开始,每隔12天,在下午1点运行一次

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc daily /mo 12 /sd 2020/12/31 /st 13:00

每隔一个周的周五运行一次

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc weekly /mo 2 /d FRI

在3月和9月的第一个星期一运行

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc monthly /mo FIRST /d MON /m MAR,SEP

每月的最后一天运行

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc monthly /mo lastday /m *

在2021年1月1日午夜运行一次

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc once /sd 2021/01/01 /st 00:00

每次系统启动时运行

schtasks /create /tn MyApp /tr c:\apps\myapp.exe /sc onstart

在用户登录时运行的任务

schtasks /create /tn StartWebSite /tr c:\myiis\webstart.bat /sc onlogon

其他使用方法可参考官方文档

 

更改计划任务

更改计划任务的命令是schtasks /change,需要注意的是更改任务是通过任务名称来选择任务的,并且无法更改任务名称。

例如修改任务的运行程序

schtasks /change /tn VirusCheck /tr C:\VirusCheck2.exe

 

查询计划任务

查询计划任务的命令是schtasks /query,有以下可用参数。

  • /fo    指定输出格式,可选择Table、List、或者CSV

可将查询结果以findstr进行筛选

schtasks /query | findstr /c:"TestQuery" 

 

结束计划任务

结束计划任务的命令是schtasks /end,只能停止计划任务启动的程序的实例,如果要停止其他进程可以使用taskkill命令。

schtasks /end /tn "My Notepad"

 

删除计划任务

删除计划任务的命令是schtasks /delete,但不能中断正在运行的程序。

可使用/f参数禁止显示确认消息。

schtasks /delete /tn StartMail /f

 

运行任务

运行任务的命令为schtasks /run,可以立即启动任务,但不会影响计划,也不会改变设置的下一个运行时间。

schtasks /run /tn SecurityScript

 

schtasks运行报错

如果WIN7系统中,计算机管理中可以找到计划任务的界面,但是在CMD窗口中运行schtasks出现“错误:无法加载列资源”时,可以在CMD窗口中输入chcp 437命令,将默认的中文GBK编码调整为美国编码即可正常使用。

 

远程控制

以上的命令都是在本地进行任务计划管理,如果要管理远程计算机上的任务计划,可以通过在命令中添加以下参数实现。

  • /s    远程计算机的主机名或者IP地址
  • /u    远程计算机的有administrator权限的登录账户名
  • /p    远程计算机的有administrator权限的登录账户密码

 

一个常用的远程启动程序脚本

schtasks没有创建立即运行任务的选项,只能通过创建ONCE类型任务,并设置开始日期为过去的时间,再通过run立即运行此任务实现。

因此可以通过以下方式实现远程创建事务启动某个程序。

schtasks /query /s 192.168.0.15 /u administrator /p password | findstr /c:"start firefox" > null && (
    schtasks /run /s 192.168.0.15 /u administrator /p password /i /tn "start firefox"
) || (
    schtasks /create /s 192.168.0.15 /u administrator /p password /tn "start firefox" /sc ONCE /st 00:00 /tr """"C:\firefox Files\Mozilla Firefox\firefox.exe"""" /ru administrator /f
    schtasks /run /s 192.168.0.15 /u administrator /p password /i /tn "start firefox"
)

这种远程启动的方式相比于之前提过的wmicpstools启动方式优点在于更接近于本地启动,能显示被启动程序的图形界面,更好地利用显卡等硬件资源,在远程启动一些专业三维软件时不会有一些奇奇怪怪的问题。

另外,注意上面的四重引号,在创建任务时如果启动的程序路径中有空格,需要将引号传入避免被截断为程序和传入参数,”的转义为”””,再加上CMD命令行中的防截断需要一重引号,一共四重。

顺便一提,%的转义为%%,其他特殊字符使用默认添加转义字符^即可。

 


她不仅仅是我的妈妈,
她还是她自己。

《你好,李焕英》——贾玲