Como emular o comando bash select no DOS em lote?

0

Oi eu tenho uma variável containig uma lista de pastas separadas por um espaço, eu quero apresentar esses elementos cada precedeed por um número, o usuário escolhe uma pasta por entrar o número associado a ele, uma vez feito isso, eu quero obtenha o elemento associado ao número e cd para ele. No linux você pode fazer isso pelo comando select mas em lote, não existe tal comando, comando de escolha não é realmente útil no meu caso, eu acho.

Para a exibição, tudo bem, aqui está meu código:

@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
)
    
por loulouzekiller 21.11.2013 / 20:57

1 resposta

0

ESCOLHA pode funcionar bem, desde que você não esteja no XP, e o número máximo de escolhas é limitado.

Se o tamanho da lista for sempre menor que 10, você poderá criar dinamicamente a lista de chaves CHOICE. (Note que coloquei o ECHO antes do CD para poder testar):

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

Se o tamanho da lista pode exceder 9, você pode predefinir uma lista de opções e usar uma substring com a contagem para limitá-las adequadamente:

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

Se você precisar dar suporte ao XP ou se quiser uma lista irrestrita, poderá alternar usando SET / P. Eu incluí o código para verificar a entrada do usuário e fazer um loop se o valor não for válido.

@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%!
    
por 22.11.2013 / 00:28

Tags