前言
计划任务程序是一个极为强大而且方便的工具,在日常工作生活中,有时会需要在电脑上定时或者每隔一段时间运行某个任务,在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" )
这种远程启动的方式相比于之前提过的wmic和pstools启动方式优点在于更接近于本地启动,能显示被启动程序的图形界面,更好地利用显卡等硬件资源,在远程启动一些专业三维软件时不会有一些奇奇怪怪的问题。
另外,注意上面的四重引号,在创建任务时如果启动的程序路径中有空格,需要将引号传入避免被截断为程序和传入参数,”的转义为”””,再加上CMD命令行中的防截断需要一重引号,一共四重。
顺便一提,%的转义为%%,其他特殊字符使用默认添加转义字符^即可。
她不仅仅是我的妈妈,
她还是她自己。
《你好,李焕英》——贾玲
评论
593040 968097An fascinating discussion may be worth comment. I believe you need to write on this topic, it may possibly undoubtedly be a taboo topic but normally people are not enough to dicuss on such topics. To a higher. Cheers 901284
336346 175660Hello my family member! I wish to say that this post is remarkable, fantastic written and come with approximately all vital infos. I would like to see extra posts like this . 267316
128502 728432An incredibly fascinating examine, I might possibly not concur entirely, but you do make some quite valid points. 338246