アプリ版:「スタンプのみでお礼する」機能のリリースについて

【VBScript】※渡したい変数のみ抜粋
WScrip quit(1)

【バッチスクリプト】
for %%i ("パラメータファイル") do (
cscript a.vbs %%i
if not %errorlevel%==0 goto err
)

上記VBSが異常終了した際に返す、戻り値1を
そのままバッチスクリプトのerrorlevelに返したい
のですが、errorlevel==0となってしまいます。

for文を使わず、vbsを実行していた際には、
旨く引き渡せていたのですが、構文の修正が
必要なのでしょうか?

どなたかご教示下さい。
宜しくお願いします。

A 回答 (1件)

例示されたバッチファイルでは、()内の環境変数はfor文開始時に展開されてしまいます。


従って%errorlevel%はfor文を開始したときの0に置き換えられてしまいます。

これを回避するには
・for文内を()で記述せずcall文でサブルーチンとする
・errorlevelの比較に if errorlevel 構文を使う
・環境変数の遅延展開を使う
などがあります。

たとえば、if errorlevel 構文を使う場合

for %%i ("パラメータファイル") do (
cscript a.vbs %%i
if errorlevel 1 goto err
)

や、環境変数の遅延展開を使う場合

setlocal ENABLEDELAYEDEXPANSION
for %%i ("パラメータファイル") do (
cscript a.vbs %%i
if not !errorlevel!==0 goto err
)

などとかけます。詳しくは、set /? や setlocal /? や if /?でヘルプをご覧ください。
    • good
    • 0

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