【问题标题】:VBScript - Using error handling to determine whether task existsVBScript - 使用错误处理来确定任务是否存在
【发布时间】:2017-01-15 17:15:06
【问题描述】:

使用我学到的信息herehere。 我在下面创建了短代码。

当我运行代码并故意输入任务计划程序库的“\”文件夹中存在的任务时,我收到“任务不存在”消息框。

我尝试在传递给函数的变量周围加上双引号,但没有成功。非常感谢任何指导。

Option Explicit
Dim strtaskn, strtaskf, sso, result

Call start
Sub start
  strtaskn = ""
  strtaskf = ""
  Do While Len(strtaskn) = 0
    strtaskn = inputbox("Please enter task name to search for:", "Task Exist?")
    If isempty(strtaskn) Then
      WScript.Quit()
    End If
  Loop

  strtaskf = InputBox("Please enter task folder to search in:" & vbCrLf & vbCrLf & "Leave blank for default folder", "Task Exist?")
  If Len(strtaskf) = 0 Then strtaskf = "\"
  If IsEmpty(strtaskf) Then
    WScript.Quit()
  End If

  'WScript.Echo strtaskn
  'WScript.Echo strtaskf

  Call taskexist(strtaskn, strtaskf)
End Sub

Function taskexist(taskname, taskfolder)
  Dim rootfolder, task

  Set sso = CreateObject("Schedule.Service")
  Call sso.Connect()

  On Error Resume Next
  Set rootfolder = sso.GetFolder(taskfolder)
  If Err.Number <> 0 Then
    result = MsgBox("Task folder does not exist " & Err.Description & vbCrLf & vbCrLf & "Do you wish to try another search?", vbYesNo+vbCritical, "Task Exist?")
    Select Case result
      Case vbYes
        Err.Clear
        Call start
      Case vbNo
        WScript.Quit()
    End Select
    Err.Clear
  End If

  Set task = rootfolder.GetTasks(taskname)
  If Err.Number <> 0 Then
    result = MsgBox("Task does not exist " & Err.Description & vbCrLf & vbCrLf & "Do you wish to try another search?", vbYesNo+vbCritical, "Task Exist?")
    Select Case result
      Case vbYes
        Err.Clear
        Call start
      Case vbNo
        WScript.quit()
    End Select
    Err.Clear
  End If
  On Error Goto 0

  result = MsgBox("Task exists" & vbCrLf & vbCrLf & "Do you wish to try another search?", vbYesNo+vbInformation, "Task Exist?")
End Function

更新

使用我的第一个 link 中显示的示例,我可以看到实现相同目标的另一种方法,方法是将集合中找到的每个任务(按 .name)加载到一个数组中,并将元素与任务名进行比较'正在搜索,或者只是通过使用迭代循环。

更新

在得知我的原始代码中的错误之前,感谢 Ansgar。我开始编写替代版本的脚本,我认为与社区分享是正确的做法......

option explicit
dim strtaskn, strtaskf, sso, rootfolder, taskcollect, numtasks, intcomp, taskreg, result

call start
sub start
strtaskn=""
strtaskf=""
do while len(strtaskn)=0
strtaskn = inputbox("Please enter task name to search for:","Task Exist?")
if isempty(strtaskn) then
wscript.quit()
end if
loop

strtaskf = inputbox("Please enter task folder to search in:" &vbcrlf&vbcrlf& "Leave blank for default folder","Task Exist?")
if len(strtaskf)=0 then strtaskf = "\"
if isempty(strtaskf) then
wscript.quit()
end if

wscript.echo strtaskn
wscript.echo strtaskf

set sso = createobject("schedule.service")
call sso.connect()

on error resume next
set rootfolder = sso.getfolder(strtaskf)
if err.number <> 0 then
result = msgbox("Task folder does not exist " &err.description &vbcrlf&vbcrlf& "Do you wish to try another search?", vbyesno+vbcritical, "Task Exist?")
select case result
case vbyes
err.clear
call start
case vbno
wscript.quit()
end select
err.clear
end if
on error goto 0

set taskcollect = rootfolder.gettasks(0)

numtasks = taskcollect.count

if numtasks = 0 then 
wscript.echo "No tasks are present in " &strtaskf& " folder"
else
for each taskreg in taskcollect
intcomp = strcomp(strtaskn, taskreg.name, vbtextcompare)
    if intcomp = 0 then
    result = msgbox("Task exists" &vbcrlf&vbcrlf& "Do you wish to try another search?", vbyesno+vbinformation, "Task Exist?")
    select case result
    case vbyes
    call start
    case vbno
    wscript.quit()
    end select  
    end if
next
    result = msgbox("Task does not exist " &vbcrlf&vbcrlf& "Do you wish to try another search?", vbyesno+vbcritical, "Task Exist?")
    select case result
    case vbyes
    call start
    case vbno
    wscript.quit()
    end select
end if
end sub

【问题讨论】:

    标签: vbscript error-handling scheduled-tasks


    【解决方案1】:
    Set task = rootfolder.GetTasks(taskname)
    

    上面的陈述并没有像你想象的那样做。 GetTasks 方法/属性(注意尾随的“s”)返回给定文件夹中的所有任务。它的参数是一个整数标志,表示隐藏任务是否应该包含在返回列表中(1→包括隐藏任务,0→不包括隐藏任务)。

    你真正想要的是GetTask 属性:

    Set task = rootfolder.GetTask(taskname)
    

    【讨论】:

      【解决方案2】:
      Set service = CreateObject("Schedule.Service")
      service.Connect()
      Set rootFolder = service.GetFolder("\")
      DetermineName = "\Test Task"
      task = rootfolder.GetTask("Test Task")
         if task = DetermineName then
           WScript.Echo "Task Exist"
        else
           WScript.Echo "Not Exist"
        end if
      

      【讨论】:

      • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多