Wie emuliert man den bash select Befehl in Batch DOS?


0

Hallo, ich habe eine Variable mit einer Liste von Ordnern, die durch ein Leerzeichen getrennt sind. Ich möchte diesen Elementen jeweils eine Nummer voranstellen. Der Benutzer wählt einen Ordner aus, indem er die ihm zugeordnete Nummer eingibt. Sobald dies erledigt ist, möchte ich das Element erhalten verbunden mit der nummer und cd dazu. Unter Linux kann man das mit select befehl machen, aber es gibt keinen solchen Befehl, choice befehl ist in meinem Fall nicht wirklich hilfreich.

Zum Anzeigen ist es in Ordnung, hier ist mein Code:

@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
)

Antworten:


0

CHOICE funktioniert einwandfrei, solange Sie nicht mit XP arbeiten und die maximale Anzahl der Auswahlmöglichkeiten begrenzt ist.

Wenn die Listengröße immer kleiner als 10 ist, können Sie die Liste der CHOICE-Schlüssel dynamisch erstellen. (Beachten Sie, dass ich ECHO vor die CD gestellt habe, damit ich es testen kann):

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

Wenn die Listengröße 9 überschreiten kann, können Sie eine Liste mit Auswahlmöglichkeiten vordefinieren und eine Teilzeichenfolge mit der Anzahl verwenden, um sie entsprechend einzuschränken:

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

Wenn Sie XP unterstützen müssen oder eine uneingeschränkte Liste wünschen, können Sie zu SET / P wechseln. Ich habe Code eingefügt, um die Eingabe des Benutzers zu überprüfen, und einen Loop zurück, wenn der Wert ungültig ist.

@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%!
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.