[前の記事]« rshでUNIXのシェルを動かすとEnterを押すまで進まない
[次の記事]vbs結果をバッチに引渡す方法 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「ERRORLEVEL」索引へ
▲カテゴリー「WSH(WINDOWS SCROPT HOST)/VBS」索引へ

バッチからVBSを起動した際の、エラーレベルと標準出力の値を同時に取得する方法

170.
バッチからVBSを起動した際の、エラーレベルと標準出力の値を同時に取得する方法
2004年12月22日(水) 15時22分
たなか
●DOS/Windowsのバージョン
OS:Win2K(SP4), Win2k Server, Win 2003 Server

----
・test01.bat //NOLOGO
CSCRIPT TEST.vbs
ECHO %ERRORLEVEL%
上記のコードでVBS側の制御でエラーコード(例えば1)を返した場合、
バッチ側の %ERRORLEVEL% でエラーコード(例えば1)を取得できます。
---
・test02.bat
FOR /F %%z IN ( 'CSCRIPT TEST.vbs //NOLOGO' ) DO (SET ARG01=%%z)
ECHO %ERRORLEVEL%
上記のコードでVBS側の制御でエラーコード(例えば1)を返した場合、
バッチ側の %ERRORLEVEL% は正常値(0)が取得されてしまいます。
----

test02.batの方は、
%ERRORLEVEL% に、CSCRIPT の結果ではなく FOR の結果が入っているためかと思うのですが、
CSCRIPT での標準出力、返り値共にバッチ側で確認する方法を模索しています。
解決策について、ヒント等でも、ご教授頂けないでしょうか?
よろしくお願いします。
171.
Re:バッチからVBSを起動した際の、エラーレベルと標準出力の値を同時に取得する方法
2004年12月22日(水) 17時48分
otn
>●DOS/Windowsのバージョン
>OS:Win2K(SP4), Win2k Server, Win 2003 Server

>----
>・test01.bat //NOLOGO
>CSCRIPT TEST.vbs
>ECHO %ERRORLEVEL%
>上記のコードでVBS側の制御でエラーコード(例えば1)を返した場合、
>バッチ側の %ERRORLEVEL% でエラーコード(例えば1)を取得できます。
>---
>・test02.bat
>FOR /F %%z IN ( 'CSCRIPT TEST.vbs //NOLOGO' ) DO (SET ARG01=%%z)
>ECHO %ERRORLEVEL%
>上記のコードでVBS側の制御でエラーコード(例えば1)を返した場合、
>バッチ側の %ERRORLEVEL% は正常値(0)が取得されてしまいます。
>----

>test02.batの方は、
>%ERRORLEVEL% に、CSCRIPT の結果ではなく FOR の結果が入っているためかと思うのですが、

FORの結果と言うより、for/f の (' ') 内はサブシェル(子プロセスのCMD.EXE)で実行されますので、親プロセスの環境変数に影響しないんだと思います。

MD . 2>NUL  %エラーレベルを1にセット%
ECHO %ERRORLEVEL%
FOR /F %%z IN ( 'CSCRIPT TEST.vbs //NOLOGO' ) DO (SET ARG01=%%z)
ECHO %ERRORLEVEL%

CD .        %エラーレベルを0にセット%
ECHO %ERRORLEVEL%
FOR /F %%z IN ( 'CSCRIPT TEST.vbs //NOLOGO' ) DO (SET ARG01=%%z)
ECHO %ERRORLEVEL%

の2つを比べて見ると、FOR/F文は ERRORLEVEL に影響を与えてないことが分かります。

>CSCRIPT での標準出力、返り値共にバッチ側で確認する方法を模索しています。
>解決策について、ヒント等でも、ご教授頂けないでしょうか?
>よろしくお願いします。

test.vbsを書きなおして、エラーコードも標準出力に書くように変更することは出来ないんですよね?
あんまり良い方法が思いつきません。一時バッチファイルを使って、

echo cscript //nologo test.vbs>tmp1.bat
echo echo ^>tmp2.bat exit /b %%ERRORLEVEL%%>>tmp1.bat
FOR /F %%z IN ('tmp1.bat') DO (set ARG01=%%z)
call tmp2.bat
ECHO %ERRORLEVEL%
del tmp1.bat tmp2.bat

とか

echo cscript //nologo test.vbs>tmp1.bat
echo echo ^>tmp2.bat set ERR=%%ERRORLEVEL%%>>tmp1.bat
FOR /F %%z IN ('tmp1.bat') DO (set ARG01=%%z)
call tmp2.bat
ECHO %ERR%
del tmp1.bat tmp2.bat
172.
Re2:バッチからVBSを起動した際の、エラーレベルと標準出力の値を同時に取得する方法
2004年12月22日(水) 18時34分
otn
>test.vbsを書きなおして、エラーコードも標準出力に書くように変更することは出来ないんですよね?
>あんまり良い方法が思いつきません。一時バッチファイルを使って、

さっきのとどっちが良いか分かりませんが、一時ファイルを使わない方法も出来ました。

setlocal enabledelayedexpansion
FOR /F %%z IN ( 'cmd /v:on /c "cscript //nologo TEST.vbs^& ECHO ^!ERRORLEVEL^!"' ) DO (
 SET ARG01=!ERR!
 SET ERR=%%z)
ECHO ARG01=%ARG01%
ECHO ERRORLEVEL=%ERR%

サブシェル内で遅延展開を有効にするには、明示的にcmd /v:on /c "..." と書かないといけない。
176.
Re3:バッチからVBSを起動した際の、エラーレベルと標準出力の値を同時に取得する方法
2004年12月27日(月) 17時10分
たなか
三通りも方法を提示していただきありがとうございました。
test.vbs は既存のプログラムなので書き換えは避けたい事と、
172.で提示して頂いた方法が、私の理解が追い付かず上手く行かない事から、
一時バッチファイルを作成して、エラーレベルを退避させて置くやり方を使わせて頂きました。

休暇を取っていたため、お礼の返信が遅れてしまい申し訳ありませんでした。
ありがとうございました。
 
 


カテゴリー「ERRORLEVEL」索引へ
カテゴリー「WSH(WINDOWS SCROPT HOST)/VBS」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年12月22日 08:58に投稿されたエントリーのページです。

ひとつ前の投稿は「rshでUNIXのシェルを動かすとEnterを押すまで進まない」です。

次の投稿は「vbs結果をバッチに引渡す方法」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート