2008-09-18 24 views
6

Actualmente, WScript muestra el cuadro de mensaje cuando hay un error de script. Estos scripts son llamados por otros procesos y se ejecutan en un servidor, por lo que no hay nadie para descartar el cuadro de error.CScript/WScript Evite que se produzca un error al bloquear

Lo que me gustaría es que el mensaje de error se descargue a STDOUT, y la ejecución devuelva el proceso de llamada. Apareciendo como un MSGBox simplemente cuelga todo.

Ideas?

Respuesta

4

Esta es la forma en que debe ejecutar el script trabajos por lotes:

cscript //b scriptname.vbs 
+0

Véase también http://stackoverflow.com/questions/8678441/difference-between-wscript-and-cscript/9062764#9062764 – Ben

0

No ha indicado qué idioma está utilizando. Si está utilizando VBScript, puede escribir un controlador de errores utilizando la instrucción On Error.... Si está utilizando JScript, puede usar un bloque try {} catch (x) {}.

0

no hacen esto:

VBScript: On Error Resume Next

Inglés: "cuando se tiene un error, ignorarlo y apenas guarda"

2

No utilice WScript; usa CScript En el símbolo del sistema de Windows, escriba lo siguiente para mostrar la ayuda.

cscript //?
Sugiero lo siguiente:
cscript //H:CScript
Esto hará de CScript su intérprete de scripting predeterminado. CScript imprime mensajes en la consola (es decir, stdout) como lo desee. (No usa ventanas de diálogo.) También puede probar el modificador // B, pero no puedo decir si debe ejecutarse por script o no. Si se trata de un cambio persistente y único como el interruptor // H, entonces esto puede funcionar para usted; si no, puede necesitar modificar todos sus programas remotos para incluirlo. A partir de la información que proporcionó, creo que solo cambiar el intérprete predeterminado (// H) hará lo que quiera.

También deberá agregar algún tipo de control de errores para evitar que la secuencia de comandos termine en un error. En Visual Basic Scripting Edition, lo más fácil de hacer si solo desea ignorar errores es agregar lo siguiente a la parte superior de su script.

On Error Resume Next
Consulte http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx para obtener más información.

1

Use WScript.Echo en lugar de MsgBox. Y ejecute el script usando CSCRIPT en lugar de WSCRIPT.

0

le sugiero que ponga su código script en un Sub - por ejemplo, DoWork - y el código de su script algo como:

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 

De esta manera, cuando se ejecuta la secuencia de comandos utilizando cscript //b, y falla, obtendrá un mensaje de error con salida estándar de errores y la persona que llama recibirá un no cero nivel de error

Cuestiones relacionadas