
はじめまして、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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない 2 2023/05/24 15:31
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- その他(プログラミング・Web制作) フォルダ内の特定 拡張子のファイルを一括実行するBat ファイルについて 4 2022/04/17 09:51
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- PostgreSQL postgreSQLをbashで実行する際に「MORE」表示をなくす方法 1 2023/05/08 21:42
- JavaScript 【Google Apps Script】「ライブラリ」が追加できなくて困っています。 1 2022/11/10 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
[teraterm] waitコマンドで停止...
-
「読み取りと実行」と「読み取...
-
バッチファイルの内容を表示さ...
-
exeファイルを実行するとコマン...
-
Access の VBA 実行中に他の操...
-
VBscriptが起動しない?
-
ネットワーク名が見つかりません
-
16進数の変換処理
-
.NETからストアドプロシージャ...
-
これってパソコンの最適化が完...
-
エクセル フォルダの画像を画...
-
VB.NETでのDOSコマンドを実行に...
-
PDFファイルを開き、印刷し、閉...
-
VBS実行時にコマンドプロンプト...
-
VBAでバッチファイルを1つ実行...
-
ExcelのVBAが特定のPC上でのみ...
-
リリース実行やExe実行で動作が...
-
複数のbatファイルを自動実行し...
-
VBAを使って名前をつけて保存を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
[teraterm] waitコマンドで停止...
-
バッチファイルの内容を表示さ...
-
exeファイルを実行するとコマン...
-
VBscriptが起動しない?
-
これってパソコンの最適化が完...
-
「読み取りと実行」と「読み取...
-
複数のbatファイルを自動実行し...
-
Windows System32 Security Hea...
-
ネットワーク名が見つかりません
-
エクセル フォルダの画像を画...
-
Excel(エクセル) VBA プロシー...
-
PDFファイルを開き、印刷し、閉...
-
Access の VBA 実行中に他の操...
-
バッチファイルが不正終了して...
-
VScodeのエラー解決法 Pythonの...
-
VBScriptでコマンドプロンプト...
-
pythonスクリプトを管理者権限...
-
VB.NETでのDOSコマンドを実行に...
-
batからexeを実行し戻り値を受...
おすすめ情報