I have doubts about how to use "for, if, echo, goto" in batch

I have the following batch script but it doesn't go to label:

for /f %%i in ('some commands') do echo %%i
IF %%i == A (goto :A) else (goto :end)
IF %%i == B (goto :B) else (goto :end)

:A
echo "OK A"
:B
echo "OK B"
:end
echo "It is not A or B"
exit

If the output of the command is the letter A, then go to the label A, if it is B then to the B and if it is "empty" or "something else" to go to end. But I can't make it go to labels :A or :B

I tried it with quotes or square brackets and I don't get the desired result:

IF [%%i] == [] goto :end
IF [%%i] == [A] goto :A
IF [%%i] == [B] goto :B

or

IF "%%i" == "" goto :end
IF "%%i" == "A" goto :A
IF "%%i" == "B" goto :B

thanks in advace


FOR variables are only valid in the loop itself.

But your loop contains only one statement echo %%i.
Therfor your IF %%i ... can 't work.

If you want the complete block to be a part of the loop, enclose it in brackets

for /f %%i in ('some commands') do (
    echo %%i
    IF %%i == A (goto :A) else (goto :end)
    IF %%i == B (goto :B) else (goto :end)
)

But now there is another problem, execution of GOTO inside a loop cancels the loop.

Better use CALL

for /f %%i in ('some commands') do (
    echo Loop: "%%i"
    IF "%%i" == "A" call :A
    IF "%%i" == "B" call :B
)
exit /b

:A
echo "OK A"
exit /b

:B
echo "OK B"
exit /b