2012-04-02 5 views

答えて

2

IFブロックまたはFORブロックの割り当ては、すぐに実現されます。適切に実現されていないのは、変数値の維持がパーセント記号で囲まれていることです。行%を実行する前に%variable%の値がに置き換えられていることに注意する必要があります。たとえば、次のようになります。

set var=Old value 
set var=New value & echo %var% 

以前のコマンドでは、「古い値」と表示されます。この問題を解決する方法は、Delayed Expansionを使用する方法です。すなわち、%でなく感嘆符で変数を囲み、setlocal ...コマンドを最初に追加します。つまり、

setlocal EnableDelayedExpansion 
set var=Old value 
set var=New value & echo !var! 

このように、!var!値はまで置き換えられます!echo!var!コマンドが実行され(遅延拡張)、前のセットコマンドが実行された後、前のコマンドは「新しい値」を表示します。

この同じダイカッションは、任意の変数(かっこ内)に適用されます。例えば:%のVaRの%値は、全体のIF(またはFOR)を実行する前に一度だけ展開されているので、

set var=Old value 
if 1 == 1 (
    set var=New value 
    echo %var% 
) 

...間違っています。あなたは使用する必要があります。

setlocal EnableDelayedExpansion 
set var=Old value 
if 1 == 1 (
    set var=New value 
    echo !var! 
) 

タイプSETを/?詳細はを参照してください。

+1

なぜsetlocal EnableDelayedExpansionが必要ですか? DelayedExpansionはレジストリでデフォルトで有効になっていませんか? – user93200

+0

デフォルトでは有効になっていませんが、レジストリで有効にすることができます。この主題の詳細については、 'CMD /?'をタイプしてください。 – Aacini

関連する問題