[前の記事]« 空き上位メモリのサイズを増やすには?
[次の記事]UNIXのLNのようにショートカットを作成するコマンドは? »

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

▲カテゴリー「FOR .. IN ( ) DO..」索引へ
▲カテゴリー「IF(結果の検査、条件分岐)」索引へ
▲カテゴリー「遅延環境変数の展開」索引へ

FOR文の%変数を環境変数にセットしたい


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
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ
カテゴリー「IF(結果の検査、条件分岐)」索引へ
カテゴリー「遅延環境変数の展開」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2002年07月26日 10:51に投稿されたエントリーのページです。

ひとつ前の投稿は「空き上位メモリのサイズを増やすには?」です。

次の投稿は「UNIXのLNのようにショートカットを作成するコマンドは?」です。

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

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