- ベストアンサー
バッチファイル(.bat)へWSH(.wsf)のエラーコードの返し方
- バッチファイル(.bat)からwshスクリプト(.wsf)を呼び出すプログラムを作成しました。そこで、wshスクリプトで実行されたエラーコードを呼び出しもとのバッチファイル(.bat)に返すことはできますでしょうか。
- バッチファイル(.bat)の中からwshスクリプト(.wsf)を呼び出し、実行されたエラーコードをバッチファイルに返す方法を教えてください。
- バッチファイル(.bat)からwshスクリプト(.wsf)を呼び出して実行し、その結果としてのエラーコードをバッチファイルに戻す方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
wsf で job で書かれたスクリプトは順番に実行されます。 質問文で書かれたCDATAセクションはこの場合必要有りません。 また、Main 関数が定義されている時自動的にそれが実行されるということもありません。ユーザーが定義した関数を実行するには呼び出す必要があります。 例えば以下のように書きます。 ---------------------------------------------------------------- <job id = "wshscript"> <script language = "VBScript"> Option Explicit Function Main() 'なんかの処理 err = Err.Number Main = err End Function 'ここが実行されるメインの処理 WScript.Quit(Main()) '関数Main を呼び出しその返値をjob の返値とする </script> </job>
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1>Dim rc は関数毎に定義するのがよいのか、 #1のお礼のプログラムの場合 function ErrorReturn の返値は使われていませんから意味はないです。 何かを実行したときのエラーコードは、 例えばErr の様に大域的に持つのがいいのかあるいは、関数毎に持つのがいいのかは、プログラマの考え次第です。 関数は、返値を持つ場合があり、必ずしも、返値でエラーコードを返せるわけでないことを考えると、byRef で引数を持たせたり、大域変数にすることも意味のあることです。
お礼
BLUEPIXYさん、回答ありがとうございます。 プログラムの目的によって考慮する必要があるのですね。このあたりは知識&経験不足なので勉強しようと思います。参照渡しや値渡しなども複雑そうですし・・・ > function ErrorReturn の返値は使われていませんから意味はないです。 BLUEPIXYさんの仰るとおりでした。実際にテストして確認いたしました。ご指摘ありがとうございます。
お礼
お返事ありがとうございます。 WScript.Quitがポイントなんですね。 test.wsfを以下のように修正したら、 呼び出しもとのバッチでエラーコードを拾えました。 ※今回の場合、Dim rc は関数毎に定義するのがよいのか、 Sub Main で定義して、Call先に引数で渡して、 Function ErrorReturn では定義しないほうがよいのか、 プログラミングを行う際に決まりごとみたいなことは あるのでしょうか。 ◆wshスクリプト(test.wsf)◆ ---------------------------------------- <job id = "wshscript"> <script language = "VBScript"> Option Explicit '----------------------------------- Sub Main() Dim rc Call ErrorReturn rc = Err.Number WScript.Quit(rc) End Sub '----------------------------------- Function ErrorReturn() Dim rc ~※処理内容省略~ rc = Err.Number ErrorReturn = rc End Function ]]> </script> </job>