CScript/WScript エラーがブロックされるのを防ぐ
-
01-07-2019 - |
質問
現在、WScript ではスクリプト エラーが発生するとメッセージ ボックスがポップアップ表示されます。これらのスクリプトは他のプロセスによって呼び出され、サーバー上で実行されるため、エラー ボックスを無視する人はいません。
私が望んでいるのは、エラー メッセージが STDOUT にダンプされ、実行によって呼び出し元のプロセスが返されることです。MSGBox としてポップすると、全体がハングするだけです。
アイデアは?
解決
スクリプト バッチ ジョブは次のように実行する必要があります。
cscript //b scriptname.vbs
他のヒント
WScript は使用しないでください。CScriptを使用します。Windows のコマンド プロンプトで次のように入力すると、ヘルプが表示されます。
cscript //?
私は次のことを提案します。cscript //H:CScript
これにより、CScript がデフォルトのスクリプト インタプリタになります。CScript は、必要に応じてメッセージをコンソール (標準出力) に出力します。(ダイアログウィンドウは使用しません。)// bスイッチを試してみることもできますが、それがスプリックごとに実行する必要があるかどうかはわかりません。//H スイッチのような永続的な 1 回限りのスイッチであれば、これでうまくいく可能性があります。そうでない場合は、すべてのリモート プログラムを変更してそれを含める必要がある場合があります。提供された情報から、デフォルトのインタープリター (//H) を変更するだけで希望どおりになると思います。
また、スクリプトがエラーで終了しないように、何らかのエラー処理を追加する必要があります。Visual Basic Scripting Edition では、エラーを無視したいだけの場合に最も簡単な方法は、スクリプトの先頭に次の行を追加することです。
On Error Resume Next
見る http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx 詳細については。
MsgBox の代わりに WScript.Echo を使用します。また、WSCRIPT ではなく CSCRIPT を使用してスクリプトを実行します。
どの言語を使用しているかについては明らかにしていません。VBScript を使用している場合は、次のコマンドを使用してエラー ハンドラーを作成できます。 エラー時... 声明。JScript を使用している場合は、 try {} catch (x) {} ブロック。
これはしないでください:
vbscript:エラー時は次から再開
英語:「エラーが発生した場合は、無視してそのまま続行してください。」
スクリプトコードをSubに入れることをお勧めします。 DoWork
- そしてスクリプトを次のようにコーディングします。
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
このようにして、次を使用してスクリプトを実行すると、 cscript //b
, が失敗すると、標準エラー出力にエラー メッセージが出力され、呼び出し元はゼロ以外のエラーレベルを受け取ります。