2008-09-18 8 views
6

Attualmente, WScript visualizza la finestra di messaggio quando si verifica un errore di script. Questi script sono chiamati da altri processi e sono eseguiti su un server, quindi non c'è nessuno a chiudere la finestra di errore.CScript/WScript Previene il blocco di un errore

Quello che mi piacerebbe è che il messaggio di errore venga scaricato su STDOUT, e l'esecuzione per restituire il processo chiamante. Popping come MSGBox appende solo l'intera cosa.

Idee?

risposta

4

Questo è come si dovrebbe essere in esecuzione di script batch job:

cscript //b scriptname.vbs 
+0

Vedere anche http://stackoverflow.com/questions/8678441/difference-between-wscript-and-cscript/9062764#9062764 – Ben

0

Non hai specificato quale lingua stai usando. Se si utilizza VBScript, è possibile scrivere un gestore errori utilizzando l'istruzione On Error.... Se si utilizza JScript, è possibile utilizzare un blocco try {} catch (x) {}.

0

Non fare questo:

VBScript: On Error Resume Next

inglese: "quando si dispone di un errore, ignorarlo e basta andare avanti"

2

Non utilizzare WScript; usa CScript. Al prompt dei comandi di Windows, digitare quanto segue per visualizzare la guida.

cscript //?
Io suggerisco quanto segue:
cscript //H:CScript
Ciò renderà CScript l'interprete di script predefinito. CScript stampa i messaggi sulla console (ad es., Stdout) come desideri. (Non usa finestre di dialogo.) Si potrebbe anche voler provare l'opzione // B, ma non posso dire se deve essere eseguito per-script o no. Se si tratta di uno switch permanente come il parametro // H, allora potrebbe funzionare per te; in caso contrario, potrebbe essere necessario modificare tutti i programmi remoti per includerlo. Dalle informazioni che hai fornito, penso che solo la modifica dell'interprete di default (// H) farà ciò che desideri.

Sarà inoltre necessario aggiungere una sorta di gestione degli errori per evitare che lo script termini in caso di errore. In Visual Basic Scripting Edition, la cosa più semplice da fare se si desidera ignorare gli errori è aggiungere quanto segue all'inizio dello script.

On Error Resume Next
Vedere http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx per ulteriori informazioni.

1

Utilizzare WScript.Echo al posto di MsgBox. E, eseguire lo script utilizzando CSCRIPT anziché WSCRIPT.

0

vi consiglio di mettere il codice di script in un sotto - ad esempio DoWork - e codificare lo script qualcosa di simile:

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 

In questo modo, quando si esegue lo script utilizzando cscript //b, e non riesce, si otterrà un output messaggio di errore per stderr e il chiamante riceverà un non- zero errorlevel.

Problemi correlati