2012-12-31 33 views
0

我已經聯合一些我的代碼到下方:這裏是否可以在.vbs腳本中進行序列化?

Option Explicit 

    Dim oShell : Set oShell = WScript.CreateObject ("WScript.Shell") 
    Dim FSO : set FSO = CreateObject("Scripting.FileSystemObject") 
    Dim StartTime,Elapsed 

    'msgBox(oShell.CurrentDirectory) 
    'MsgBox(FSO.GetFile(Wscript.ScriptFullName).ParentFolder) 
    oShell.CurrentDirectory = FSO.GetFile(Wscript.ScriptFullName).ParentFolder 

    StartTime = Timer 

    oShell.run "ParentChildLinkFinal.vbs", 1, True 
    oShell.run "Parent_Child_Merge_final.vbs", 1, True 
    oShell.run "CycleTime.vbs", 1, True 
    oShell.run "Baddata.vbs", 1, True 
    oShell.run "Matrixrefresh.vbs", 1, True 

    Elapsed = Timer - StartTime 

    MsgBox("Total time taken to finish this task:" & Elapsed & "in Seconds") 

現在一個關注是 - 假設在任何CycleTime.vbs文件出現錯誤,但隨後控制進行到下一Baddata.vbs文件,而不殺死Main.vbs文件。所以如何處理,如果發生錯誤,停止main.vbs那裏本身或讓執行繼續。

按照丹尼爾

「如果不是oShell.run( 」CycleTime.vbs「,1,TRUE)= 0,則Wscript.Quit將取代線您當前使用的叫」 CycleTime.vbs 「in Main.vbs

如果oShell.run(」CycleTime.vbs「,1,True)= 99,那麼Wscript.Quit也會替換當前用於調用」CycleTime.vbs「的行 區別是因爲你沒有指定CycleTime.vbs如何可能出錯 如果它有可能發生運行時錯誤並且停止執行,你可能想要使用第一個選項ñ。 如果發生錯誤,您陷入錯誤陷印,您可以退出代碼。就像WScript.Quit 99.然後你可以通過我提供給你的第二個版本來檢查腳本是否以該代碼結束。 這真的歸結到你要如何處理你的腳本,你所呼叫的失敗。」

爲什麼這樣的方法

@Daniel True幫助腳本暫停執行,直至當前.vbs完成,但是我正在尋找任何特殊值,如果我可以從每個.vbs返回一個特殊值,main.vbs將會知道它的當前.vbs成功完成,我們開始下一個.vbs。但是,如果只有成功,然後下一個會開始。目前,我認爲,假設任何.vbs出現錯誤,那麼只要我關閉了錯誤或者下一個腳本開始運行。所以我想盡可能地將任何成功的全面溝通發送到main.vbs。那有可能嗎?

+0

@ Hiten004這是一個好主意嗎?說,如果發生錯誤'CycleTime.vbs',我可以從'Main.vbs'中捕獲嗎? – CodeLover

+0

使用返回錯誤代碼存在Main.vbs http://stackoverflow.com/questions/187040/how-do-i-return-an-exit-code-from-a-vbscript-console-application – Hiten004

回答

2

要擴展Hiten指出的內容,您需要在Main.vbs中檢查被調用的.vbs文件的返回值。你這樣做利用的Run.

返回值。例如:

而不是做oShell.run "CycleTime.vbs", 1, True

IF NOT oShell.run("CycleTime.vbs", 1, True) = 0 then Wscript.Quit

這將如果CycleTime.vbs暫停退出當前執行的線程由於運行時間錯誤(運行腳本的調用將返回false)。

現在,如果您能夠在CycleTime.vbs中正常處理錯誤,則可以在使用Wscript.Quit code關閉它時發送一條消息,如其他答案中所述。

所以如果你想在CycleTime.vbs中正常處理錯誤,你仍然可以指出發生了錯誤。只需在您的主腳本檢查返回的代碼是這樣的:

IF oShell.run("CycleTime.vbs", 1, True) = 99 then Wscript.Quit

這樣,如果CycleTime.vbs內它有這樣的代碼腳本將結束,如果CycleTime.vbs與代碼99結束。這會發生:

If err then 
    'Exit script with code 99 to indicate an error occurred. 
    Wscript.Quit 99 
End if 
+0

我會upvote,因爲檢查.Run()* Function *調用的返回值是正確的解決方案,但不是在刪除WScript.Quit * Sub *調用中的spuriuos()之前。 –

+0

@ Ekkehard.Horner對不起,感謝您的更正。 :) –

+0

@DanielCook所有其他.vbs文件,如何編寫整體代碼?作爲一個'cycletime.vbs'我用作示例。但是錯誤可能來自任何.vbs文件! – CodeLover

1
在main.vbs停止代碼和退出main.vbs

更多產品詳情請點擊此鏈接

使用VBScript錯誤處理: VBScript -- Using error handling

樣品:

On Error Resume myErrCatch 
'Do step 1 
'Do step 2 
'Do step 3 

myErrCatch: 
'log error 
Resume Next 

從.VBS創建一個Exist code,然後退出Main.vbs

DIM returnValue 
returnValue = 99 
WScript.Quit(returnValue) 
+0

VBScript不支持'在錯誤恢復myErrCatch'種語法。你能告訴我爲什麼'EXIT CODE'已被設置爲'99'嗎? – CodeLover

+0

VBScript不支持錯誤處理[MSDN鏈接與示例](http://msdn.microsoft.com/en-us/library/windows/desktop/ms675540(v = vs.85).aspx) – Hiten004

+0

您可以將任何數字.. 99是一個樣本。 – Hiten004

相關問題