[计划任务 - dos]制作任务工具
语法
schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier] [/d day] [/m month[,month...] [/i IdleTime] [/st StartTime] [/sd StartDate] [/ed EndDate] [/s computer [/u[domain\]user /p password]] [/ru {[Domain\]User | "System"} [/rp Password]] /?
参数
- /tn TaskName 指定任务的名称。
- /tr TaskRun 指定任务运行的程序或命令。键入可执行文件、脚本文件或批处理文件的完全合格的路径和文件名。
- 如果忽略该路径,SchTasks.exe 将假定文件在 Systemroot\System32 目录下。
- /sc schedule 指定计划类型。有效值为 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE。
-
MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY
指定计划的时间单位。ONCE
任务在指定的日期和时间运行一次。ONSTART
任务在每次系统启动的时候运行。可以指定启动的日期,或下一次系统启动的时候运行任务。ONLOGON
每当用户(任意用户)登录的时候,任务就运行。可以指定日期,或在下次用户登录的时候运行任务。ONIDLE
只要系统空闲了指定的时间,任务就运行。可以指定日期,或在下次系统空闲的时候运行任务。 - /mo modifier
- 指定任务在其计划类型内的运行频率。这个参数对于 MONTHLY 计划是必需的。对于 MINUTE、HOURLY、DAILY 或 WEEKLY 计划,这个参数有效,但也可选。默认值为 1。
MINUTE
1 ~ 1439
任务每 n 分钟运行一次。HOURLY
1 ~ 23
任务每 n 小时运行一次。DAILY
1 ~ 365
任务每 n 天运行一次。WEEKLY
1 ~ 52
任务每 n 周运行一次。MONTHLY
1 ~ 12
任务每 n 月运行一次。LASTDAY
任务在月份的最后一天运行。FIRST、SECOND、THIRD、FOURTH、LAST
与 /d day 参数共同使用,并在特定的周和天运行任务。例如,在月份的第三个周三。 - /d dirlist
- 指定周或月的一天。只与 WEEKLY 或 MONTHLY 计划共同使用时有效。
WEEKLY
可选项。有效值是 MON ~ SUN 和 * (每一天)。MON 是默认值。MONTHLY
在使用 FIRST、SECOND、THIRD、FOURTH 或 LAST 修饰符 (/mo) 时,需要 MON ~ SUN 中的某个值。1 ~ 31 是可选的,只在没有修饰符或修饰符为 1 ~ 12 类型时有效。默认值是 1 (月份的第一天)。 - /m month[,month...]
- 指定一年中的一个月。有效值是 JAN ~ DEC 和 * (每个月)。/m 参数只对于 MONTHLY 计划有效。在使用 LASTDAY 修饰符时,这个参数是必需的。否则,它是可选的,默认值是 * (每个月)。
- /i InitialPageFileSize
- 指定任务启动之前计算机空闲多少分钟。键入一个 1 ~ 999 之间的整数。这个参数只对于 ONIDLE 计划有效,而且是必需的。
- /st StartTime
- 以 HH:MM:SS 24 小时格式指定时间。默认值是命令完成时的当前本地时间。/st 参数只对于 MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY 和 ONCE 计划有效。它只对于 ONCE 计划是必需的。
- /sd StartDate
- 以 MM/DD/YYYY 格式指定任务启动的日期。默认值是当前日期。/sd 参数对于所有的计划有效,但只对于 ONCE 计划是必需的。
- /ed EndDate
- 指定任务计划运行的最后日期。此参数是可选的。它对于 ONCE、ONSTART、ONLOGON 或 ONIDLE 计划无效。默认情况下,计划没有结束日期。
- /s Computer
- 指定远程计算机的名称或 IP 地址(带有或者没有反斜杠)。默认值是本地计算机。
- /u [domain\]user
- 使用特定用户帐户的权限运行命令。默认情况下,使用已登录到运行 SchTasks 的计算机上的用户的权限运行命令。
- /p password
- 指定在 /u 参数中指定的用户帐户的密码。如果使用 /u 参数,则需要该参数。
- /ru {[Domain\]User | "System"}
- 使用指定用户帐户的权限运行任务。默认情况下,使用用户登录到运行 SchTasks 的计算机上的权限运行任务。
- /p Password
- 指定用户帐户的密码,该用户帐户在 /u 参数中指定。如果在指定用户帐户的时候忽略了这个参数,SchTasks.exe 会提示您输入密码而且不显示键入的文本。使用 NT Authority\System 帐户权限运行的任务不需要密码,SchTasks.exe 也不会提示索要密码。
- /?
- 在命令提示符显示帮助。
- 以上是schtasks的规则,不过对于我们来说,有很多参数是用不到的,也没必要把所有的参数都用到,找出必须要的,其他可以忽略,接下来来做一款适用的任务工具来运用它。
例子
利用UI画出所需要的界面,然后在界面上添加运行所需要的代码,如下图为UI界面:

- 在每个按钮上添加要达到目的所需要的代码
- 创建任务
在输入命令框中输入所要执行的dos命令,可以输入多个命令,一个命令一行
@pyqtSignature("")
def on_run_btn_clicked(self):
"""
创建任务.
"""
# 在查询栏显示的内容
cmd = self.taskRun.toPlainText()
# 构建'res/command/01.txt'文件
if not os.path.exists('res/command/01.txt'):
m = open('res/command/01.txt','w')
m.close()
p = str(self.modifier.text())
# 判断日期是否正确
if self.endDate.text() <= self.startDate.text():
QtUtil.showOkDialog(self, u'日期出错', u'结束日期要大于开始日期')
elif not p.isdigit():
QtUtil.showOkDialog(self, u'频率出错', u'运行频率必须为整数')
else:
# 如果任务条件不完整,则创建失败
if self.taskName.text()=='' or self.modifier.text()=='' or cmd=='':
QtUtil.showOkDialog(self, u'创建失败', u'任务内容缺失')
else:
# 读取'res/command'下所有文件的文件名到filename
for root, dirs, files in os.walk('res/command'):
for file in files:
filename = open('res/filename.txt','a')
filename.write('/')
# filename.truncate()
filename.write(str(file))
filename.close()
filename1 = open('res/filename.txt')
fn = filename1.read()
filename1.close()
# 如果任务名在filename中能找到,则说明任务已经存在
if '/' + str(self.taskName.text()) + '.cmd' in fn:
QtUtil.showOkDialog(self, u'创建失败', u'任务已存在')
else:
# 任务内容
if self.schedule.currentText() == 'monthly':
run = 'schtasks /create /tn '+ self.taskName.text() + ' /tr '+os.getcwd()+'/res/command/'+self.taskName.text()+'.bat /sc ' + self.schedule.currentText() + ' /d ' +self.modifier.text() + ' /m ' + self.month.currentText() + ' /st ' + self.timeEdit.text() + ' /sd ' + self.startDate.text() + ' /ed ' + self.endDate.text()
elif self.schedule.currentText() == 'once':
run = 'schtasks /create /tn '+ self.taskName.text() + ' /tr '+os.getcwd()+'/res/command/'+self.taskName.text()+'.bat /sc ' + self.schedule.currentText() + ' /st ' + self.timeEdit.text() + ' /sd ' + self.startDate.text()
if self.startDate.text() < time.strftime('%Y/%m/%d') or (self.timeEdit.text() <= time.strftime('%H:%M:%S') and self.startDate.text() == time.strftime('%Y/%m/%d')) :
QtUtil.showOkDialog(self, u'时间错误', u'设置时间早于当前时间')
return
else:
run = 'schtasks /create /tn '+ self.taskName.text() + ' /tr '+os.getcwd()+'/res/command/'+self.taskName.text()+'.bat /sc ' + self.schedule.currentText() + ' /mo ' +self.modifier.text() + ' /st ' + self.timeEdit.text() + ' /sd ' + self.startDate.text() + ' /ed ' + self.endDate.text()
# 创建命令文件
fd = open('res/command/'+self.taskName.text()+'.bat','w')
fd.write(cmd)
fd.close()
# 创建任务文件
f = open('res/command/'+self.taskName.text()+'.cmd','w')
f.write(run)
f.close()
# 创建任务
os.system(os.getcwd()+'\\res\command\\'+str(self.taskName.text())+'.cmd')
QtUtil.showOkDialog(self, u'创建成功', u'创建成功')
创建任务界面

- 查询任务
点击查询任务,查询所有创建的计划任务
@pyqtSignature("")
def on_query_btn_clicked(self):
"""
查询任务.
"""
# 调整 936 为 437 美国编码,才可运行
os.system('chcp 437')
# 查询任务
os.system('schtasks /query')
# 在生成新log文件前先删除以前的log文件
if os.path.exists('res/log.txt'):
os.remove('res/log.txt')
# 遍历'res/command'的所有文件,将所有文件内容复制到log文件中
for root, dirs, files in os.walk('res/command'):
for file in files:
dir = str(root)+'/'+str(file)
f = open(dir,'r')
scripts = f.read()
new_path_filename = 'res/log.txt'
f = open(new_path_filename, 'a')
f.write(scripts)
f.write('\n')
f.close()
# 读取log文件
if os.path.exists('res/log.txt'):
fd=open('res/log.txt')
info = fd.read()
fd.close()
# 在查询窗口显示log文件内容
self.taskQuery.setText(str(info))
else:
QtUtil.showOkDialog(self, u'失败', u'不存在任务')
查询任务界面

- 删除任务
在删除框上输入要删除的任务名称,点击删除之后,不再执行该任务
@pyqtSignature("")
def on_delete_btn_clicked(self):
"""
删除任务.
"""
# 强制删除删除框内任务
x=os.system('schtasks /delete /tn '+str(self.taskDelete.text()).decode('gbk')+' /f')
# 如果已经任务已经删除,则报任务不存在
if x==1:
QtUtil.showOkDialog(self, u'删除失败', u'任务名错误或不存在该任务')
else:
os.remove('res/filename.txt')
if os.path.exists('res/command/'+self.taskDelete.text()+'.cmd'):
os.remove('res/command/'+str(self.taskDelete.text())+'.bat')
os.remove('res/command/'+str(self.taskDelete.text())+'.cmd')
# 读取'res/command'下所有文件的文件名到filename
for root, dirs, files in os.walk('res/command'):
for file in files:
filename = open('res/filename.txt','a')
filename.write('/')
# filename.truncate()
filename.write(str(file))
filename.close()
filename1 = open('res/filename.txt')
fn = filename1.read()
filename1.close()
# 删除任务,并删除命令文件与任务文件
QtUtil.showOkDialog(self, u'删除成功', u'删除成功')
删除任务界面

- 清空任务
清空所有创建的任务
@pyqtSignature("")
def on_delall_btn_clicked(self):
"""
清空任务.
"""
os.system('schtasks /delete /tn * /f')
if os.path.exists('res/log.txt'):
os.remove('res/log.txt')
if os.path.exists('res/filename.txt'):
os.remove('res/filename.txt')
shutil.rmtree('res/command')
os.mkdir('res/command')
QtUtil.showOkDialog(self, u'成功', u'任务清空')
清空任务界面


本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4872889.html
[计划任务 - dos]制作任务工具的更多相关文章
- DOS版PE工具制作
// PE.cpp : 定义控制台应用程序的入口点. //DOS版PE工具制作 #include "stdafx.h" #include <windows.h> #in ...
- Crosstool-ng制作交叉编译工具链
Crosstool-ng制作交叉编译工具链 交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编 ...
- winform制作小工具的技巧
在使用winfrom制作一些工具的时候,一些基本设置都是去属性里面找来找去,一段时间就忘了,记录记录以备不时之需. 一.窗体绘制的常用设置 窗体的设置应当在窗体构造函数中InitializeCompo ...
- 利用Crosstool-ng制作交叉编译工具链
1.什么是crosstool-ng crosstool-ng,全称是crosstool Next Generation,即下一代crosstool,即crosstool的升级版.那么什么是crosst ...
- 关于EZDML数据库表结构制作设计工具使用踩的坑
我使用的是一款EZDML的数据库表结构制作设计工具 最开始在数据库创建数据库名为personalmall,基字符集为默认,数据库排序规则也是默认,创建完成之后 去EZDML生成SQL 点击执行sql ...
- 【干货】微信场景之H5页面制作免费工具大集合
营销代有手段出,各领风骚数百天.要说现在哪些营销方式最能传播,屡屡刷爆朋友圈的H5页面肯定就是首当其冲的,提到H5页面,就立马想到"围住神经猫",上线微信朋友圈3天的时间便创造了用 ...
- 从零开始制作cli工具,快速创建项目脚手架
背景 在工作过程中,我们常常会从一个项目工程复制代码到一个新的项目,改项目配置信息.删除不必要的代码. 这样做的效率比较低,也挺繁琐,更不易于分享协作. 所以,我们可以制作一个cli工具,用来快速创建 ...
- DOS实用命令/工具
winver 检查Windows版本wmimgmt.msc 打开windows管理体系结构wupdmgr windows更新程序wscript windows脚本宿主设置write 写字板w ...
- 使用Canvas制作画图工具
前 言 JRedu canvas是HTML5中重要的元素之一,canvas元素使用JavaScript在网页上绘制图像,画布是一个矩形区域,我们可以控制其每一个元素,并且canvas拥有多种的绘 ...
随机推荐
- USACO Training Section 1.2 [USACO1.2]方块转换 Transformations
题目描述 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺时针 ...
- python(安装)
1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python3(建议自定义安装路径) 3.配置环境变量 [右键计算机]-->[属 ...
- 初次认识Ngnix
这几天写那个HTTPD,最后觉得学到的好像很少,而且就算最后运行成功了好像也没有什么.所以想学习一些生活中真正在运用着的web服务器, 上网查询了些资料了解到apache, lighttpd, ngi ...
- 题目分享J
题意:从一棵树的树根出发,除树根外每个节点都有其能经过的最多次数与经过后会获得的价值(可能为负,最多只能领一次价值),问最终走回树根能获得的最大价值以及有无可达到此价值的多种走法(ps:一开始在树根就 ...
- D. Almost All Divisors(数学分解因子)
其实这题并不难啊,但是分解因子的细节一定要小心. \(比如样例48,2是因子说明24也是因子,也就是说假如x存在\) \(那么x一定是因子中的最小数乘上最大数\) \(那我们现在去验证x是否存在,先拿 ...
- QML设计飘散效果
1,目标及展示 首先希望实现文字.图片.控件等在触发后,呈现飘散并消失的效果.在QT例程<Qt Quick Particles Examples>是一个海星点击鼠标后呈现打散的效果,这个效 ...
- [hdu4627 The Unsolvable Problem]数论
题意:给一个数n,找一个正整数x<n,使得x和n-x的最小公倍数最大. 思路:显然x和n-x越接近越好,gcd必须为1(贪心).从大到小考虑x,如果n为奇数,则答案就是x=n/2,如果n为偶数, ...
- angular js 删除及多条删除
一.编写service //删除 public int delete(Long id); //多条删除 public int deletes(List<Long> id); 二.编写ser ...
- RunLoop总结
参考学习了YY大神的http://blog.ibireme.com/2015/05/18/runloop/#mode RunLoop: 看做是一个对象,这个对象管理了其需要处理的事件和消息,并提供了一 ...
- Mysql 常用数据库操作
一.数据库操作: 1.查看数据库: >SHOW DATABASES; 2.创建数据库: >CREATE DATABASE db_name; //db_name为数据库名 3.使用数据库: ...