Привет, у меня есть переменная, содержащая список папок, разделенных пробелом, я хочу представить эти элементы, каждому из которых предшествует число, пользователь выбирает папку, вводя номер, связанный с ней, как только это будет сделано, я хочу получить элемент связано с номером и CD к нему. В Linux вы можете сделать это с помощью команды select, но она пакетная, такой команды нет, команда выбора не очень полезна в моем случае, я думаю.

Для воспроизведения это нормально, вот мой код:

@echo off
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

setlocal enabledelayedexpansion
Set Count=1

echo.
echo Please choose a folder:
echo.
for %%z in (%folderlist%) do (
  echo !Count!^) %%z
  Set /A Count+=1
)

1 ответ1

0

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%!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .