Вам нужно отсроченное расширение, чтобы решить эту проблему.
Поскольку все процентные переменные расширяются во время анализа блока, их значения, похоже, остаются неизменными.
При отложенном расширении переменные раскрываются во время выполнения.
setlocal EnableDelayedExpansion
set count=0
(
set /a count+=1
echo %count% fails
echo !count! works
)