首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建定时任务的VBScript

创建定时任务的VBScript
EN

Stack Overflow用户
提问于 2015-07-22 04:52:26
回答 3查看 23.2K关注 0票数 6

我正在尝试创建一个VBScript,它创建一个批处理文件,然后创建一个计划任务来运行该批处理文件。到目前为止,我尝试的所有操作都创建了批处理文件,但没有创建计划任务,也没有收到任何错误。这是我到目前为止所知道的:

代码语言:javascript
复制
Option Explicit

Dim objFSO, outFile, wShell
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set outFile = objFSO.CreateTextFile("C:\test.bat", True)
outFile.WriteLine "Start www.google.com"
outFile.Close

Set wShell = CreateObject ("Wscript.Shell") 
wShell.Run "cmd SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN 'Test Task' /TR 'C:\test.bat' /ST 16:30", 0

我已经尝试了""Test Task""""C:\test.bat"",并且得到了相同的结果。但是当我在命令提示符下运行以下命令时:

代码语言:javascript
复制
SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN "Test Task" /TR "C:\test.bat" /ST 16:30

任务创建成功。

我尝试的另一种方法是创建两个批处理文件:一个批处理文件用于打开网页,另一个批处理文件用于创建计划任务。最后,我运行了task.bat文件。这就是我的想法:

代码语言:javascript
复制
Option Explicit

Dim objFSO, outFile, wShell
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set outFile = objFSO.CreateTextFile("C:\test.bat", True)
outFile.WriteLine "Start www.google.com"
outFile.Close

Set outFile = objFSO.CreateTextFile("C:\task.bat", True)
outFile.WriteLine "SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN ""Test Task"" /TR ""C:\test.bat"" /ST 16:30"

Set wShell = CreateObject ("Wscript.Shell") 
wShell.Run "cmd start ""C:\task.bat"""

这会创建批处理文件,但在最后只打开cmd,之后什么也不做。

我的猜测是问题出在wShell.Run部分,但我没有足够的经验知道问题出在哪里。

我不确定从哪里开始,所以任何建议都是很好的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-22 04:59:43

没有必要使用cmdSchtasks是它自己的可执行文件,而不是cmd中的命令。对于您引用的参数,只需使用两个引号。

例如:

代码语言:javascript
复制
wShell.Run "SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN ""Test Task"" /TR ""C:\test.bat"" /ST 16:30", 0
票数 5
EN

Stack Overflow用户

发布于 2015-07-22 05:52:51

作为一个VBScript,你可以做任何命令能做的事情。

下面是如何在根文件夹中列出计划任务的方法。

代码语言:javascript
复制
Set TS = CreateObject("Schedule.Service")
TS.Connect("Serenity")

Set rootFolder = TS.GetFolder("\")

Set tasks = rootFolder.GetTasks(0)

If tasks.Count = 0 Then 
    Wscript.Echo "No tasks are registered."
Else
    WScript.Echo "Number of tasks registered: " & tasks.Count

    For Each Task In Tasks
    A=Task.Name
    A = A & " " & Task.NextRunTime
    A = A & " " & Task.LastTaskResult
    wscript.echo A
    Next
End If

这段代码来自documentation,展示了如何创建任务。

时间触发器示例(脚本)

此脚本示例说明如何创建在特定时间运行记事本的任务。该任务包含一个基于时间的触发器,该触发器指定激活任务的开始边界、运行记事本的可执行操作和停用任务的结束边界。

以下过程介绍如何调度任务以在特定时间启动可执行文件。

安排记事本在特定时间启动的

  1. 创建一个TaskService对象。此对象允许您在指定的文件夹中创建任务。
  2. 获取任务文件夹并创建任务。使用TaskService.GetFolder方法获取存储任务的文件夹,使用TaskService.NewTask方法创建表示任务的TaskDefinition对象。
  3. 使用TaskDefinition对象定义有关任务的信息。使用TaskDefinition.Settings属性定义确定任务计划程序服务执行任务的方式的设置,使用TaskDefinition.RegistrationInfo属性定义描述任务的信息。
  4. 使用TaskDefinition.Triggers属性创建基于时间的触发器。此属性提供对TriggerCollection对象的访问。使用TriggerCollection.Create方法(指定要创建的触发器类型)创建基于时间的触发器。创建触发器时,设置触发器的起始边界和结束边界以激活和取消激活触发器。开始边界指定何时执行任务的操作。
  5. 使用TaskDefinition.Actions属性为要执行的任务创建操作。此属性提供对ActionCollection对象的访问。使用ActionCollection.Create方法指定要创建的操作类型。此示例使用ExecAction对象,该对象表示执行命令行操作的操作。
  6. 使用TaskFolder.RegisterTaskDefinition方法注册任务。对于此示例,任务将在当前时间加30秒启动记事本。

以下VBScript示例显示如何安排任务在任务注册后30秒执行记事本。

‘此示例将任务安排为在注册任务后30秒内启动notepad.exe。'------------------------------------------------------------------‘指定基于时间的触发器的常量。const TriggerTypeTime =1‘指定可执行操作的常量。'******************************************************** ActionTypeExec =0 const‘创建TaskService对象。Set '******************************************************** = CreateObject("Schedule.Service")调用service.Connect() service‘获取要在其中创建任务定义的文件夹。Dim rootFolder Set rootFolder = service.GetFolder("\")‘taskDefinition变量是TaskDefinition对象。Dim taskDefinition‘标志参数为0,因为它不受支持。Set '******************************************************** = taskDefinition (0)service.NewTask‘定义任务信息。‘通过创建RegistrationInfo对象来设置任务的注册信息。Dim regInfo Set regInfo = taskDefinition.RegistrationInfo regInfo.Description =“在某个时间启动记事本”regInfo.Author =“管理员”‘通过’创建TaskSettings对象来设置任务调度器的任务设置信息。Dim设置设置'******************************************************** = taskDefinition.Settings settings.Enabled = True settings.StartWhenAvailable = True settings.Hidden = False创建基于时间的触发器。Dim triggers Set triggers = taskDefinition.Triggers Dim trigger Set trigger = triggers.Create(TriggerTypeTime)‘定义触发器何时处于活动状态的触发器变量。Dim startTime,endTime Dim time time = DateAdd("s",30,Now)‘从现在起开始时间= 30秒startTime =XmlTime(时间) time = DateAdd("n",5,现在)‘结束时间=从现在起5分钟endTime =XmlTime(时间) WScript.Echo "startTime :“& startTime WScript.Echo "endTime :”& endTime trigger.StartBoundary = startTime trigger.EndBoundary = endTime trigger.ExecutionTimeLimit = "PT5M“’五分钟trigger.Id = "TimeTriggerId”trigger.Enabled = True from*‘创建要执行的任务的action。‘将操作添加到任务以运行notepad.exe。'***********************************************************操作集操作= taskDefinition.Actions.Create( ActionTypeExec ) Action.Path = "C:\Windows\System32\notepad.exe“WScript.Echo”任务定义已创建。即将提交任务...“Dim‘注册(创建)任务。'------------------------------------------------------------------‘调用rootFolder.RegisterTaskDefinition( _ "Test TimeTrigger",taskDefinition,6,,,3) WScript.Echo“任务已提交”,获取触发器’startBoundary WScript.Echo endBoundary‘的时间。‘以正确的格式返回时间:‘YYYY-MM-DDTHH:MM:SS。'------------------------------------------------------------------函数XmlTime(t) Dim cSecond,cMinute,CHour,cDay,cMonth,cYear Dim tTime,tDate cSecond = "0“&秒(T) cMinute = "0”&分钟(T) cHour = "0“&小时(T) cDay = "0”&日(T) cMonth = "0“&月(T) cYear =年(T) tTime = Right(cHour,2) & ":”& Right(cMinute,2) &_ ":“& Right(cSecond,2) tDate = cYear & "-“& Right(cMonth,2) & "-”& Right(cDay,2) XmlTime = tDate & "T“& tTime End Function

票数 7
EN

Stack Overflow用户

发布于 2015-07-22 05:00:39

在脚本中,您在命令中使用了单引号,而在CMD测试中,您使用了双引号。如果你运行..它还能工作吗??:

代码语言:javascript
复制
SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN 'Test Task' /TR 'C:\test.bat' /ST 16:30

如果没有,请尝试使用双引号,并通过使用双引号进行转义:

代码语言:javascript
复制
wShell.Run "SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN ""Test Task"" /TR ""C:\test.bat"" /ST 16:30", 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31549393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档