2008-09-18 97 views
6

目前,WScript在出現腳本錯誤時彈出消息框。這些腳本由其他進程調用,並在服務器上運行,因此沒有人可以關閉錯誤框。CScript/WScript防止錯誤被阻止

我想要的是將錯誤消息轉儲到STDOUT,並執行以返回調用進程。作爲MSGBox彈出只是掛起整個事情。

想法?

回答

4

這是你應該如何運行腳本的批處理作業:

cscript //b scriptname.vbs 
+0

參見http://stackoverflow.com/questions/8678441/difference-between-wscript-and-cscript/9062764#9062764 – Ben 2012-10-11 22:33:27

0

你還沒有說明你正在使用什麼語言。如果您使用VBScript,則可以使用On Error...語句編寫錯誤處理程序。如果您使用的是JScript,則可以使用try {} catch (x) {}塊。

0

不這樣做:

的VBScript: 在錯誤恢復下一

英語: 「當你有一個錯誤,忽略它,只是繼續前進。」

2

不要使用WScript;使用CScript。在Windows命令提示符處,鍵入以下內容以顯示幫助。

cscript //?
我建議如下:
cscript //H:CScript
這將使CScript成爲默認的腳本解釋器。 CScript會根據需要將消息輸出到控制檯(即stdout)。 (它不使用對話窗口。) 您可能還想嘗試// B開關,但我無法確定是否必須按每個腳本運行。如果它是一個持久的,像H開關那樣的一次性開關,那麼這可能對你有用;如果沒有,您可能需要修改所有遠程程序以包含它。根據您提供的信息,我認爲只需更改默認解釋器(// H)即可完成您想要的任務。

您還需要添加某種錯誤處理以防止腳本終止發生錯誤。在Visual Basic Sc​​ripting Edition中,如果您只想忽略錯誤,最簡單的方法是將以下內容添加到腳本的頂部。

On Error Resume Next
有關更多信息,請參閱 http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx

1

使用WScript.Echo而不是MsgBox。然後,使用CSCRIPT而不是WSCRIPT運行腳本。

0

我建議你把你的腳本代碼在Sub - 例如DoWork - 和編寫腳本是這樣的:當您運行使用cscript //b腳本

On Error Resume Next 

DoWork 

If Err.Number <> 0 Then 

    If "CSCRIPT.EXE" = UCase(Right(WScript.Fullname, 11)) Then 
     WScript.StdErr.Write Err.Number & ": " & Err.Description 
    Else 
     WScript.Echo Err.Number & ": " & Err.Description 
    End If 
    WScript.Quit 1 
End If 

Private Sub DoWork 

    ... your code ... 

End Sub 

這樣,它失敗了,你會得到一個錯誤信息輸出到標準錯誤,並調用者將獲得非零錯誤級別。