4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

batの遅延環境変数についての備忘録

Last updated at Posted at 2019-04-22

batで、if/forブロックの中で変数を取り扱う場合には注意が必要です。

通常、変数の値の読み出し時は%var%とします。
しかし、if/forブロック内で新たに
変数の値を変更した場合、これでは期待の値を得ることができません。

この現象の理由はbatではif/forブロック内の処理実行時に、

  1. ブロックの最後の)までの読み出しを先に一気に行う
  2. ブロック内の変数値を展開
  3. ()中のループ処理へと入っていく
    といった手続きが取られるためです。

つまり、②の時点の変数の値が採用されるために
ループ内で変数の値を変更しても反映されないのです。

この現象を回避するには遅延環境変数を利用します。
ファイル冒頭へ、
setlocal EnableDelayedExpansionとして、遅延環境変数を有効にした上で
変数の読出時には!var!とします。

これで②時点での変数読み出しを回避することができます。

@echo off
setlocal EnableDelayedExpansion

for  %%a in (*.txt) do (
	set name=%%a
	echo !name!
)

endlocal

こちらも参照
batについての備忘録

参考

batファイルでfor文内に変数を利用する場合の罠

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?