バッチスクリプトで文字列内の変数をすぐに処理しない

バッチスクリプトで文字列内の変数をすぐに処理しない

変数を含む変数をすぐにではなく、要求されたときにのみ処理できるかどうかを知りたいです。たとえば、次のバッチ:

 @echo off
 setlocal EnableDelayedExpansion
 set VA=Two
 set VAR=!VA! people
 set VA=Three
 ECHO !VAR!

「2 人」と出力されます。エコーを使用して最後にのみ解析を実行し、「3 人」を出力することは可能ですか?

答え1

それは不可能です。変数に値が割り当てられると、その値は割り当て時に使用された変数やテキストに依存しなくなります。

希望する出力を得るための最も簡単な方法は、VA 変数と最後にテキストをエコーするだけです。基本的には、すべての計算を実行し、最後に出力をまとめます。

@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VA=Three
ECHO !VA! people
pause

答え2

最後にもう一度 VAR を設定するだけです。変数を設定できる回数に制限はありません。

覚えておいてください、バッチ ファイルは、コマンド プロンプトに入力できるコマンドのリストにすぎません。基本的に、各行は、時系列順に一度に 1 つのコマンドを実行します。

したがって、適切な条件で VAR を高くする必要がある場合は、その瞬間の直前に設定します。例:

@echo off
setlocal EnableDelayedExpansion
set VA=Two
set VAR=%VA% people
echo %VAR%

set VA=Three
::We want to update VAR, so lets set it again:
set VAR=%VA% people
echo %VAR%

pause

バッチファイル内の::はREMと同じである

関連情報