2008-09-18 44 views
6

Hiện tại, WScript bật lên hộp thông báo khi có lỗi tập lệnh. Các script này được gọi bởi các tiến trình khác, và được chạy trên một máy chủ, vì vậy không có ai để bỏ qua hộp lỗi.CScript/WScript Ngăn chặn một lỗi đang bị chặn

Điều tôi muốn là để thông báo lỗi được chuyển sang STDOUT và thực thi để trả về quá trình gọi. Popping như một MSGBox chỉ treo toàn bộ điều.

Ý tưởng?

Trả lời

4

Đây là cách bạn nên chạy Script công việc hàng loạt:

cscript //b scriptname.vbs 
+0

Xem thêm http://stackoverflow.com/questions/8678441/difference-between-wscript-and-cscript/9062764#9062764 – Ben

0

Bạn chưa nói ngôn ngữ nào mình đang sử dụng. Nếu bạn đang sử dụng VBScript, bạn có thể viết trình xử lý lỗi bằng cách sử dụng câu lệnh On Error.... Nếu bạn đang sử dụng JScript, bạn có thể sử dụng khối try {} catch (x) {}.

0

không làm điều này:

VBScript: On resume lỗi tiếp theo

tiếng Anh: "khi bạn có một lỗi, bỏ qua nó và chỉ tiếp tục đi"

2

Không sử dụng WScript; sử dụng CScript. Tại dấu nhắc lệnh của Windows, nhập thông tin sau để hiển thị trợ giúp.

cscript //?
Tôi đề nghị những điều sau đây:
cscript //H:CScript
Điều này sẽ làm cho CScript trở thành trình thông dịch kịch bản mặc định của bạn. CScript in các thông báo vào giao diện điều khiển (ví dụ: stdout) như bạn mong muốn. (Nó không sử dụng các cửa sổ hộp thoại.) Bạn cũng có thể muốn thử chuyển // B, nhưng tôi không thể biết liệu nó có được chạy trên mỗi tập lệnh hay không. Nếu đó là một công tắc một lần, liên tục như công tắc // H, thì điều này có thể phù hợp với bạn; nếu không, bạn có thể cần phải sửa đổi tất cả các chương trình từ xa của bạn để bao gồm nó. Từ thông tin bạn đã cung cấp, tôi nghĩ việc thay đổi trình thông dịch mặc định (// H) sẽ thực hiện những gì bạn muốn.

Bạn cũng sẽ cần phải thêm một số loại xử lý lỗi để giữ tập lệnh chấm dứt lỗi. Trong Visual Basic Script Edition, điều dễ nhất để làm nếu bạn chỉ muốn bỏ qua lỗi là thêm phần sau vào đầu tập lệnh của bạn.

On Error Resume Next
Xem http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx để biết thêm thông tin.

1

Sử dụng WScript.Echo thay vì MsgBox. Và, chạy tập lệnh bằng CSCRIPT thay vì WSCRIPT.

0

tôi đề nghị bạn đặt mã script của bạn trong một Sub - ví dụ DoWork - và mã kịch bản một cái gì đó của bạn như:

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 

Bằng cách này, khi bạn chạy script của bạn sử dụng cscript //b, và nó không thành công, bạn sẽ nhận được một thông báo lỗi đầu ra để stderr và người gọi sẽ nhận được một phi zero errorlevel.