はじめまして、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>
----------------------------------------
長くなってしまい、申し訳ありませんが、
ご教授願えますでしょうか。
宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
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>
お返事ありがとうございます。
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>
No.2
- 回答日時:
#1>Dim rc は関数毎に定義するのがよいのか、
#1のお礼のプログラムの場合
function ErrorReturn の返値は使われていませんから意味はないです。
何かを実行したときのエラーコードは、
例えばErr の様に大域的に持つのがいいのかあるいは、関数毎に持つのがいいのかは、プログラマの考え次第です。
関数は、返値を持つ場合があり、必ずしも、返値でエラーコードを返せるわけでないことを考えると、byRef で引数を持たせたり、大域変数にすることも意味のあることです。
BLUEPIXYさん、回答ありがとうございます。
プログラムの目的によって考慮する必要があるのですね。このあたりは知識&経験不足なので勉強しようと思います。参照渡しや値渡しなども複雑そうですし・・・
> function ErrorReturn の返値は使われていませんから意味はないです。
BLUEPIXYさんの仰るとおりでした。実際にテストして確認いたしました。ご指摘ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
「読み取りと実行」と「読み取...
-
【VB.NET】exeを実行すると「発...
-
VBscriptが起動しない?
-
バッチファイルの内容を表示さ...
-
exeファイルを実行するとコマン...
-
[teraterm] waitコマンドで停止...
-
MATLABでssを実行すると、未定...
-
バッチで実行するVBScriptから...
-
これってパソコンの最適化が完...
-
PDFファイルを開き、印刷し、閉...
-
複数のbatファイルを自動実行し...
-
16進数の変換処理
-
NASに移したBATファイルからセ...
-
VScodeのエラー解決法 Pythonの...
-
asp.netからbcpコマンドの実行
-
[VBScript]ファイルの削除
-
Access の VBA 実行中に他の操...
-
VBS実行時にコマンドプロンプト...
-
フォルダを閉じる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
exeファイルを実行するとコマン...
-
[teraterm] waitコマンドで停止...
-
「読み取りと実行」と「読み取...
-
これってパソコンの最適化が完...
-
VBscriptが起動しない?
-
ネットワーク名が見つかりません
-
hostファイル
-
バッチファイルの内容を表示さ...
-
エクセル フォルダの画像を画...
-
PDFファイルを開き、印刷し、閉...
-
バッチファイルで以下のような...
-
Excel(エクセル) VBA プロシー...
-
VScodeのエラー解決法 Pythonの...
-
NASに移したBATファイルからセ...
-
pythonスクリプトを管理者権限...
-
Excel VBA ステップインが途中...
-
バッチファイルが不正終了して...
-
16進数の変換処理
-
複数のbatファイルを自動実行し...
おすすめ情報