目前,WScript在出現腳本錯誤時彈出消息框。這些腳本由其他進程調用,並在服務器上運行,因此沒有人可以關閉錯誤框。CScript/WScript防止錯誤被阻止
我想要的是將錯誤消息轉儲到STDOUT,並執行以返回調用進程。作爲MSGBox彈出只是掛起整個事情。
想法?
目前,WScript在出現腳本錯誤時彈出消息框。這些腳本由其他進程調用,並在服務器上運行,因此沒有人可以關閉錯誤框。CScript/WScript防止錯誤被阻止
我想要的是將錯誤消息轉儲到STDOUT,並執行以返回調用進程。作爲MSGBox彈出只是掛起整個事情。
想法?
這是你應該如何運行腳本的批處理作業:
cscript //b scriptname.vbs
你還沒有說明你正在使用什麼語言。如果您使用VBScript,則可以使用On Error...語句編寫錯誤處理程序。如果您使用的是JScript,則可以使用try {} catch (x) {}塊。
不這樣做:
的VBScript: 在錯誤恢復下一
英語: 「當你有一個錯誤,忽略它,只是繼續前進。」
不要使用WScript;使用CScript。在Windows命令提示符處,鍵入以下內容以顯示幫助。
cscript //?
我建議如下:
cscript //H:CScript
這將使CScript成爲默認的腳本解釋器。 CScript會根據需要將消息輸出到控制檯(即stdout)。 (它不使用對話窗口。) 您可能還想嘗試// B開關,但我無法確定是否必須按每個腳本運行。如果它是一個持久的,像H開關那樣的一次性開關,那麼這可能對你有用;如果沒有,您可能需要修改所有遠程程序以包含它。根據您提供的信息,我認爲只需更改默認解釋器(// H)即可完成您想要的任務。
您還需要添加某種錯誤處理以防止腳本終止發生錯誤。在Visual Basic Scripting Edition中,如果您只想忽略錯誤,最簡單的方法是將以下內容添加到腳本的頂部。
On Error Resume Next
有關更多信息,請參閱
http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx。
使用WScript.Echo而不是MsgBox。然後,使用CSCRIPT而不是WSCRIPT運行腳本。
我建議你把你的腳本代碼在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
這樣,它失敗了,你會得到一個錯誤信息輸出到標準錯誤,並調用者將獲得非零錯誤級別。
參見http://stackoverflow.com/questions/8678441/difference-between-wscript-and-cscript/9062764#9062764 – Ben 2012-10-11 22:33:27