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