電子書籍の厳選無料作品が豊富!

はじめまして、kiwi88と申します。

バッチファイル(.bat)からwshスクリプト(.wsf)を呼び出すプログラムを作成しました。
そこで、wshスクリプトで実行されたエラーコードを呼び出しもとのバッチファイル(.bat)に返すことはできますでしょうか。

以下はバッチファイル(.bat)からwshスクリプト(.wsf)を呼び出す箇所のソースです。

◆バッチファイル(test.bat)◆
----------------------------------------
~※処理内容省略~

cscript test.wsf //nologo //Job:wshscript > batch.log
IF %ERRORLEVEL% NEQ 0 GOTO ERR
exit

:ERR
set ret=%ERRORLEVEL%
echo ****** [%:ERRORLEVEL=%ret%] ****** > err.txt
exit %ret%
----------------------------------------

以下はwshスクリプト(.wsf)のエラーコードを返す箇所のソースです。

◆wshスクリプト(test.wsf)◆
----------------------------------------
<job id = "wshscript">
<script language = "VBScript">
<![CDATA[

Option Explicit

Function Main()

~※処理内容省略~

err = Err.Number
Main = err

End Function

]]>
</script>
</job>
----------------------------------------

長くなってしまい、申し訳ありませんが、
ご教授願えますでしょうか。
宜しくお願いいたします。

A 回答 (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>
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

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>

お礼日時:2006/08/07 15:56

#1>Dim rc は関数毎に定義するのがよいのか、


#1のお礼のプログラムの場合
function ErrorReturn の返値は使われていませんから意味はないです。
何かを実行したときのエラーコードは、
例えばErr の様に大域的に持つのがいいのかあるいは、関数毎に持つのがいいのかは、プログラマの考え次第です。
関数は、返値を持つ場合があり、必ずしも、返値でエラーコードを返せるわけでないことを考えると、byRef で引数を持たせたり、大域変数にすることも意味のあることです。
    • good
    • 0
この回答へのお礼

BLUEPIXYさん、回答ありがとうございます。

プログラムの目的によって考慮する必要があるのですね。このあたりは知識&経験不足なので勉強しようと思います。参照渡しや値渡しなども複雑そうですし・・・

> function ErrorReturn の返値は使われていませんから意味はないです。

BLUEPIXYさんの仰るとおりでした。実際にテストして確認いたしました。ご指摘ありがとうございます。

お礼日時:2006/08/08 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!