Batch es ridiculamente limitado, no es posible una iteración de caracteres ya que no existe ese tipo de loop, entonces, debes idear técnicas alternativas para llevar a cabo ese tipo de tarea, por ejemplo con un un For range (For /L) substrayendo cada caracter del string y defininendo un terminador de string, es decir, hay que añadirle un caracter especial al final del string para saber cuando salir de la iteración, al encontrar ese caracter especial.
Ejemplo:
@Echo OFF & Setlocal EnableDelayedExpansion
Set "finalizer=Ç"
Set /A "mayusCount=0"
Set /A "minusCount=0"
Echo: Type any string...
Set /P "str=>> "
Set "str=%str%%finalizer%"
For /L %%c In (0, 1, 99998) Do (
Set "char=!str:~%%c,1!"
If "!char!" EQU "A" (Set /A "mayusCount+=1")
If "!char!" EQU "a" (Set /A "minusCount+=1")
If "!char!" EQU "%finalizer%" (Goto :Break)
<Nul set /P "char=!char!"
)
:Break
Echo+ | More
Echo: "A" count: %mayusCount%
Echo: "a" count: %minusCount%
Pause&Exit /B 0
Saludos