- ベストアンサー
【VBScript】※渡したい変数のみ抜粋
【VBScript】※渡したい変数のみ抜粋 WScrip quit(1) 【バッチスクリプト】 for %%i ("パラメータファイル") do ( cscript a.vbs %%i if not %errorlevel%==0 goto err ) 上記VBSが異常終了した際に返す、戻り値1を そのままバッチスクリプトのerrorlevelに返したい のですが、errorlevel==0となってしまいます。 for文を使わず、vbsを実行していた際には、 旨く引き渡せていたのですが、構文の修正が 必要なのでしょうか? どなたかご教示下さい。 宜しくお願いします。
- みんなの回答 (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 /?でヘルプをご覧ください。