の結果が
になるなんて知らなかった・・・コマンドプロンプトでは%で囲まれた変数は途中経過を無視して一気に展開されるものだかららしい。 正しく処理させるためには、バッチファイルを作って先頭に setlocal enabledelayedexpansion という記述を付加し、そして使用する環境変数はビックリマークで囲む。
これで予想通りの結果で出力される。
参考にしたウェブサイト https://wa3.i-3-i.info/word12518.html その後、早速使うことになったのだが、デメリットって無いのか?と思って検索したところ解説していた。 https://qiita.com/yz2cm/items/4983be006116c369d08b どうも、ファイル名にワイルドカードを使用したりする場合には非常に注意が必要みたい。 何故なら、ビックリマークを2つ以上使用しているファイル名が存在する場合、それだけで誤動作を引き起こしてしまうから。 たとえば
という名前のファイル名が存在する場合、ワイルドカードを使用してこのファイルを選択すると予期せぬ動作を引き起こす。 ビックリマークがファイル名として使えるのでこういう問題が起きる。 だからバッチファイル全体をsetlocal enabledelayedexpansionで囲むのは危険みたいだ。 !〜〜!を使用する要所要所でだけ囲んでいけばいいみたい。 多分こういうファイル名でも駄目だろうね
業務系ファイルではビックリマークをファイル名に付与したりはしないだろうけど、学生時代のノリで作ったファイルとかだと引っかかりそう。 自分もこんなファイル名のやつあった気がする・・・ 自分自身で使う場合はともかく、ネット上で配布プログラムの一部として添付したり仕事でプログラムに添付したりする場合には特に気を付ける必要がありそう。
下に行くほど新しいコメントです