プロが教えるわが家の防犯対策術!

ファイルをコピーしてからFOR文により6回処理を繰り返すような
バッチファイルを作成しようと思っています。
そのFOR文内でコールしたサブルーチンのERRORLEVELがうまく取得できません。ファイルコピーをしなければ値が取得できるのですが。。。
何が 原因なのか皆目見当つかずで行き詰ってしまいました。
どなたか 教えてください。 宜しく御願いします。

@echo off
copy test.txt test.txt.bak

for /L %%A in (0,1,5) do (
call :test
echo 戻り値:%ERRORLEVEL%
)
:test
exit /b 99

A 回答 (1件)

環境変数は、一行ごとに解釈されるようです。


%ERRORLEVEL%も同様です。
for ( ... )は、一文とみなされ、for文内でERROELEVELが変わっていても、
echo文の%ERRORLEVEL%は、for文実行前の値となってしまいます。
実際には、ERRORLEVELはセットされており、
if errorlevel では、ちゃんと機能します。

実行中に変更される環境変数を使用するためには、
遅延環境変数という機能があります。

cmd /v:onとしてコマンドプロンプトを起動後、
変数を、!ERROELEVEL! と指定することで、実行中に変更された環境変数を使用することができます。

以上
    • good
    • 1
この回答へのお礼

nidokingさん 回答ありがとうございました。
cmd /v:onはうまく使えなかったので
setlocal enabledelayedexpansion ~ endlocal
を使用しましたが、お陰さまで解決出来ました。
遅延環境変数という機能があるのですね。知りませんでした。

お礼日時:2007/04/24 10:43

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

このQ&Aを見た人はこんなQ&Aも見ています