• [计划任务


    语法

    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 将假定文件在 SystemrootSystem32 目录下。
    /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
    任务在月份的最后一天运行。

    FIRSTSECONDTHIRDFOURTHLAST
    与 /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 AuthoritySystem 帐户权限运行的任务不需要密码,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()+'\rescommand\'+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('
    ')
                    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

     

     

  • 相关阅读:
    TI tlv320aic3104 codec调试之DAI
    【考试总结】20220719
    【考试总结】20220705
    【ARC127F】±AB
    【考试总结】20220725
    【考试总结】20220711
    【考试总结】20220713
    【考试总结】20220706
    【考试总结】20220721
    【考试总结】20220718
  • 原文地址:https://www.cnblogs.com/superdo/p/4872889.html
Copyright © 2020-2023  润新知