Расширение переменных с процентами выполняется до выполнения оператора / блока.
Таким образом, в вашем случае полный блок расширяется до выполнения echo %ITER%
до постоянной echo 0
.
Сама переменная ITER корректно обновляется в цикле.
Чтобы избежать этого, вы можете использовать отложенное расширение, это работает как процентное расширение, но только в момент выполнения
@echo off
setlocal EnableDelayedExpansion
SET ITER=0
for %%i in (%*) do (
SET /a ITER+=1
ECHO !ITER!
)