CHOICE может работать нормально, если вы не используете XP, а максимальное количество вариантов ограничено.
Если размер списка всегда меньше 10, вы можете динамически создать список ключей CHOICE. (Обратите внимание, что я поставил ECHO перед CD, чтобы я мог проверить):
@echo off
setlocal enabledelayedexpansion
set folderlist=C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\TecsysCP C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\mast_main_dtw1i C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\dev_main_dtw1o
set count=1
set "choice="
echo(
echo Please choose a folder:
echo(
for %%F in (%folderlist%) do (
echo !count!^) %%~F
set "choice=!choice!!count!"
set "option.!count!=%%F"
set /a count+=1
)
echo(
choice /c %choice% /m ">" /n
echo cd !option.%errorlevel%!
Если размер списка может превышать 9, то вы можете заранее определить список вариантов и использовать подстроку с количеством, чтобы ограничить их соответствующим образом:
@echo off
setlocal enabledelayedexpansion
set folderlist=C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\TecsysCP C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\mast_main_dtw1i C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\dev_main_dtw1o C4 C5 C6 C7 C8 C9 C10 C11 C12
set count=0
set "choice=123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
echo(
echo Please choose a folder:
echo(
for %%F in (%folderlist%) do (
for %%N in (!count!) do echo !choice:~%%N,1!^) %%~F
set /a count+=1
set "option.!count!=%%F"
)
echo(
choice /c !choice:~0,%count%! /m ">" /n
echo cd !option.%errorlevel%!
Если вы должны поддерживать XP или если вы хотите неограниченный список, вы можете переключиться на использование SET /P. Я включил код для проверки ввода пользователя и зациклился, если значение недопустимо.
@echo off
setlocal enabledelayedexpansion
set folderlist=C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\TecsysCP C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\mast_main_dtw1i C:\TecsysDev\iTopiaControlPanel\trunk\jboss-6.1.0.Final\server\dev_main_dtw1o C4 C5 C6 C7 C8 C9 C10 C11 C12
:menu
set count=1
set "valid= "
echo(
echo Please choose a folder:
echo(
for %%F in (%folderlist%) do (
echo !count!^) %%~F
set "valid=!valid!!count! "
set "option.!count!=%%F"
set /a count+=1
)
echo(
set "choice=0"
set /p "choice=> "
if "!valid: %choice% =!" equ "!valid!" (
echo Invalid choice, please try again.
pause
goto menu
)
echo cd !option.%choice%!