1

例えば以下のようなモノを作成します。

@ECHO OFF
SET A=HOGE1
SET /A %A%EGOH+=1
ECHO %HOGE1EGOH%
PAUSE

ECHO には 1 と正しく表示されます。
しかしこれは『%A%』が『HOGE1』であるが為に動作しています。
そこで

ECHO %A%EGOH
PAUSE

例えばこの様な書き方で 1 を表示させたいのですが、このままでは動作しません。
どのように記述すれば良いのでしょうか?

水瀬敦美
  • 149
  • 1
  • 13

2 Answers2

3

SETLOCAL ENABLEDELAYEDEXPANSIONを使うと遅延評価が使えます。遅延評価は!変数名!と記述します。つまり!%A%EGOH!と記述すると%A%が展開されて!HOGE1EGOH!となり、遅延評価により1が表示されます。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET A=HOGE1
SET /A %A%EGOH+=1
ECHO !%A%EGOH!
PAUSE
sayuri
  • 42,863
  • 1
  • 33
  • 94
  • For文にしか使った事がなかったので盲点でした。 おかげで無事に目的に近づくことが出来ました。ありがとうございます。 – 水瀬敦美 Jun 20 '20 at 14:43
1

参考までにsetlocalを使わない場合こんな方法があります。

@ECHO OFF
SET A=HOGE1
SET /A %A%EGOH+=1
CALL ECHO %%%A%EGOH%%
PAUSE
jackson
  • 171
  • 1
  • 6
  • 今回は使用することはありませんでしたが、今後何かの拍子に使うときが来るかもしれないので大変参考になます。ありがとうございます。 – 水瀬敦美 Jun 25 '20 at 14:14