MOD EDIT: See later posts as this was not a problem with choice as mentioned incorrectly here
So you think I'm insane. Then so be it.
I took the the time to write a test .BAT with content as follows
Code: Select all
@echo off
SETLOCAL enabledelayedexpansion
ECHO.
ECHO CHOICE being located in an IF block and SETLOCAL enabledelayedexpansion
ECHO.
IF "1" EQU "1" (
rem 1st
CHOICE /M "Continue "
ECHO answer %ERRORLEVEL%
rem 2nd
CHOICE /M "Continue "
ECHO answer !ERRORLEVEL!
rem 3rd
CHOICE /M "Continue "
IF ERRORLEVEL 2 (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
rem 4th
CHOICE /M "Continue "
IF "%ERRORLEVEL%"=="2" (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
)
TIMEOUT 3
ECHO.
ECHO CHOICE being located in a FOR loop and SETLOCAL enabledelayedexpansion
ECHO.
FOR /l %%? IN (1,1,1) DO (
rem 1st
CHOICE /M "Continue "
ECHO answer %ERRORLEVEL%
rem 2nd
CHOICE /M "Continue "
ECHO answer !ERRORLEVEL!
rem 3rd
CHOICE /M "Continue "
IF ERRORLEVEL 2 (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
rem 4th
CHOICE /M "Continue "
IF "%ERRORLEVEL%"=="2" (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
)
TIMEOUT 3
ECHO.
ECHO CHOICE not being located in an IF block and SETLOCAL enabledelayedexpansion
ECHO.
rem 1st
CHOICE /M "Continue "
ECHO answer %ERRORLEVEL%
rem 2nd
CHOICE /M "Continue "
ECHO answer !ERRORLEVEL!
rem 3rd
CHOICE /M "Continue "
IF ERRORLEVEL 2 (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
rem 4th
CHOICE /M "Continue "
IF "%ERRORLEVEL%"=="2" (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
TIMEOUT 3
ECHO.
ECHO CHOICE not being located in a FOR loop and SETLOCAL enabledelayedexpansion
ECHO.
rem 1st
CHOICE /M "Continue "
ECHO answer %ERRORLEVEL%
rem 2nd
CHOICE /M "Continue "
ECHO answer !ERRORLEVEL!
rem 3rd
CHOICE /M "Continue "
IF ERRORLEVEL 2 (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
rem 4th
CHOICE /M "Continue "
IF "%ERRORLEVEL%"=="2" (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
TIMEOUT 3
ENDLOCAL
SETLOCAL
ECHO.
ECHO CHOICE not being located in an IF block / FOR loop and SETLOCAL
ECHO.
rem 1st
CHOICE /M "Continue "
ECHO answer %ERRORLEVEL%
rem 2nd
CHOICE /M "Continue "
ECHO answer !ERRORLEVEL!
rem 3rd
CHOICE /M "Continue "
IF ERRORLEVEL 2 (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
rem 4th
CHOICE /M "Continue "
IF "%ERRORLEVEL%"=="2" (
ECHO answer 2
) ELSE (
ECHO answer INCORRECT
)
PAUSE
ENDLOCAL
EXIT /b
to test on ERRORLEVEL returned if "N" key (NO) was pressed.
If you take the time to run it, you will see, that if CHOICE is located within an IF block / FOR loop and with 'SETLOCAL enabledelayedexpansion', then
wrong results are returned. Same is the case if CHOICE is NOT is located within an IF block / FOR loop with only 'SETLOCAL'
Only if CHOICE is NOT located within an IF block / FOR loop but with 'SETLOCAL enabledelayedexpansion' then correct results are returned.
Have a nice day.