我正在尝试创建一个VBScript,它创建一个批处理文件,然后创建一个计划任务来运行该批处理文件。到目前为止,我尝试的所有操作都创建了批处理文件,但没有创建计划任务,也没有收到任何错误。这是我到目前为止所知道的:
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"",并且得到了相同的结果。但是当我在命令提示符下运行以下命令时:
SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN "Test Task" /TR "C:\test.bat" /ST 16:30任务创建成功。
我尝试的另一种方法是创建两个批处理文件:一个批处理文件用于打开网页,另一个批处理文件用于创建计划任务。最后,我运行了task.bat文件。这就是我的想法:
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部分,但我没有足够的经验知道问题出在哪里。
我不确定从哪里开始,所以任何建议都是很好的。
发布于 2015-07-22 04:59:43
没有必要使用cmd。Schtasks是它自己的可执行文件,而不是cmd中的命令。对于您引用的参数,只需使用两个引号。
例如:
wShell.Run "SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN ""Test Task"" /TR ""C:\test.bat"" /ST 16:30", 0发布于 2015-07-22 05:52:51
作为一个VBScript,你可以做任何命令能做的事情。
下面是如何在根文件夹中列出计划任务的方法。
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,展示了如何创建任务。
时间触发器示例(脚本)
此脚本示例说明如何创建在特定时间运行记事本的任务。该任务包含一个基于时间的触发器,该触发器指定激活任务的开始边界、运行记事本的可执行操作和停用任务的结束边界。
以下过程介绍如何调度任务以在特定时间启动可执行文件。
安排记事本在特定时间启动的
TaskService.GetFolder方法获取存储任务的文件夹,使用TaskService.NewTask方法创建表示任务的TaskDefinition对象。TaskDefinition对象定义有关任务的信息。使用TaskDefinition.Settings属性定义确定任务计划程序服务执行任务的方式的设置,使用TaskDefinition.RegistrationInfo属性定义描述任务的信息。TaskDefinition.Triggers属性创建基于时间的触发器。此属性提供对TriggerCollection对象的访问。使用TriggerCollection.Create方法(指定要创建的触发器类型)创建基于时间的触发器。创建触发器时,设置触发器的起始边界和结束边界以激活和取消激活触发器。开始边界指定何时执行任务的操作。TaskDefinition.Actions属性为要执行的任务创建操作。此属性提供对ActionCollection对象的访问。使用ActionCollection.Create方法指定要创建的操作类型。此示例使用ExecAction对象,该对象表示执行命令行操作的操作。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
发布于 2015-07-22 05:00:39
在脚本中,您在命令中使用了单引号,而在CMD测试中,您使用了双引号。如果你运行..它还能工作吗??:
SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN 'Test Task' /TR 'C:\test.bat' /ST 16:30如果没有,请尝试使用双引号,并通过使用双引号进行转义:
wShell.Run "SchTasks /Create /SC WEEKLY /D MON,TUE,WED,THU,FRI /TN ""Test Task"" /TR ""C:\test.bat"" /ST 16:30", 0https://stackoverflow.com/questions/31549393
复制相似问题