Windows Batch - Выберите имя из списка - PullRequest
0 голосов
/ 08 января 2020

Мне было интересно, можно ли распечатать список, а затем позволить пользователю выбрать любое имя в этом списке для просмотра, вот код:

@echo off
setlocal enabledelayedexpansion
set maxList=5

::creating variables for different names.
::Filip
set FilipTitle=1
set FilipAge=22
set FilipWeight=80

::Ada
set AdaTitle=0
set AdaAge=20
set AdaWeight=42

::Bob
set BobTitle=1
set BobAge=38
set BobWeight=73

set "names=Filip,Ada,Bob"

::pritning the list of names
:start
echo Which name would you like to see?
for /l %%i in (1; 1; %maxList%) do call :sub %%i
goto check

:sub
for /f "tokens=%1 delims=," %%a in ("%names%") do (
echo %%i. %%a
)
goto :eof

::asking user which name they want to view
:check
set /p nameCheck=
goto %nameCheck%

::printing the stats for the name mentioned
:Filip
echo Age: %FilipAge%
echo Weight: %FilipWeight%
pause
goto start

:Ada
echo Age: %AdaAge%
echo Weight: %AdaWeight%
pause
goto start

:Bob
echo Age: %BobAge%
echo Weight: %BobWeight%
pause
goto start

Приведенный выше код печатает список, но только позволяет просматривать имя, набрав имя, есть ли способ, позволяющий пользователю вводить число, соответствующее имени в списке - так 1. будет Филипп, 2. Ада и так далее? Таким образом, вместо ввода имени они могут ввести «1», а затем распечатать 1-е имя в списке.

Код выбора команды:

:start
for /l %%i in (1; 1; %maxList%) do call :sub %%i
goto check

:sub
for /f "tokens=%1 delims=," %%a in ("%names%") do (
echo %%i. %%a
)
goto :eof

:check
choice /c 123 /n /m "Which name do you want to view?"
if errorlevel 3 (
goto filip
)
if errorlevel 2 (
goto ada
)
if errorlevel 1 (
goto bob
)

1 Ответ

0 голосов
/ 10 января 2020

Написание одного и того же кода несколько раз не является хорошим выбором.

@echo off
setlocal enabledelayedexpansion

REM creating variables for different names.
REM Filip
set FilipTitle=1
set FilipAge=22
set FilipWeight=80

REM Ada
set AdaTitle=0
set AdaAge=20
set AdaWeight=42

REM Bob
set BobTitle=1
set BobAge=38
set BobWeight=73

set "names=Filip,Ada,Bob"
REM build an array of names and the numbers for choice:
set number=0
for %%a in (%names%) do (
  set /a number+=1
  echo !number!: %%a
  set choices=!choices!!number!
  set "name_!number!=%%a"
)
:start
choice /c %choices% /m "Enter your choice "
set name=!name_%errorlevel%!
REM display result:
echo Name: %name%
echo Age: !%name%Age!
echo Title: !%name%Title!
echo Weight: !%name%Weight!
goto :start
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...