2016-09-07 36 views
0

使用我學到的信息herehere。 我在下面創建了短代碼。VBScript - 使用錯誤處理來確定任務是否存在

當我運行代碼,並故意輸入存在任務調度程序庫的「\」文件夾中的任務時,我收到「任務不存在」msgbox。

我試圖在傳入函數的變量周圍加雙引號,但沒有成功。任何指導非常感謝。

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 

UPDATE

用我的第一link所示的例子中,我可以看到在集合中找到(請將.Name)每個任務加載到實現相同目標的另一種方式一個數組,並將元素與我正在搜索的taskname進行比較,或者只是使用迭代循環。

UPDATE

在我的原代碼中的錯誤的學習,感謝安斯加爾之前。我開始腳本替代形式,我相信與社區共享是做正確的事...

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 

回答

1
Set task = rootfolder.GetTasks(taskname) 

上述聲明沒有做什麼,你認爲它。方法/屬性GetTasks(注意結尾的「s」)返回給定文件夾中的所有任務。其參數是一個整數標誌,指示是否應在返回列表中包含隱藏任務(1 →包含隱藏任務,0 →不包含隱藏任務)。

你真正想要的是GetTask屬性:

Set task = rootfolder.GetTask(taskname) 
+0

非常感謝安斯加爾... –