|
518) FOR文の%変数を環境変数にセットしたい とき 2002/07/26(金) 21:27 |
|
はじめまして。 win2000のDOSについての質問があります。 %変数の中身を環境変数に代入し、後続の処理で 使いたいのですが、環境変数に%変数の値が入りません。 01: @ECHO OFF 02: SETLOCAL 03: FOR /F "tokens=1,2" %%I IN ( INPUTFILE ) DO ( 04: IF %%I EQU KEYWORD ( 05: set VAR=%%J 06: echo %VAR% 07: ) ELSE ( 08: %VAR%を使って処理したい 09: ) 10: ) 06行目の出力結果は「ECHO は <OFF> です。」となってしまいます。 みなさまのお知恵を拝借したく。 よろしくお願いします。 |
|
519) Re:FOR文の%変数を環境変数にセットしたい SYSOP 2002/07/27(土) 02:15 |
|
とき さん こんにちは。 >win2000のDOSについての質問があります。 > >%変数の中身を環境変数に代入し、後続の処理で >使いたいのですが、環境変数に%変数の値が入りません。 > >01: @ECHO OFF >02: SETLOCAL >03: FOR /F "tokens=1,2" %%I IN ( INPUTFILE ) DO ( >04: IF %%I EQU KEYWORD ( >05: set VAR=%%J >06: echo %VAR% >07: ) ELSE ( >08: %VAR%を使って処理したい >09: ) >10: ) > >06行目の出力結果は「ECHO は <OFF> です。」となってしまいます。 標準では環境変数が先に実際値に変換されてからバッチ処理が実行される順序になっているため、ある行(または()でくくったブロック)においてsetで定義した環境変数の最新の内容は、同じ行/ブロック内から参照することができません。 この例でいえば、事前にVARという環境変数は存在していないため、6行めは、実行される前の段階ですでに ECHO [空の文字列] に変換されてしまっています。そのため単なるECHO コマンドが実行されてしまったわけです。 )でブロックが閉じられたあと=10行めより後=で参照するぶんには、セットされた値が正しく参照できるはずです。 その他、同様趣旨の話題が461番のコメント・ツリーにもありますので、そちらも参照してくださいね。 YanaKen |