как связать эти переменные с этим выбором привел errorlevel - PullRequest
0 голосов
/ 19 октября 2018

У меня есть каталог %appdata%\lootbot\locations, где может быть любое количество файлов, каждый из которых содержит один путь к каталогу.этот код создает список этих (неизвестных) файлов и пути в них, а также приглашение выбора вместе с номером, который будет использоваться choice для их выбора.

set "count=0"
for %%s in ("%appdata%\lootbot\locations\*") do set /p locale=<"%%~s" & set "dirname=%%~s" & call :recall
set "choices="
if defined string1 echo %string1% & set "choices=1"
if defined string2 echo %string2% & set "choices=12"
if defined string3 echo %string3% & set "choices=123"
if defined string4 echo %string4% & set "choices=1234"
if defined string5 echo %string5% & set "choices=12345"
if defined string6 echo %string6% & set "choices=123456"
if defined string7 echo %string7% & set "choices=1234567"
if defined string8 echo %string8% & set "choices=12345678"
if defined string9 echo %string9% & set "choices=123456789"
if not defined choices echo too many & pause & exit /b
choice /c %choices%q /n /m "select the saved directory number you want to re-enter or Q to quit: "
echo errorlevel %errorlevel%
exit /b

:recall
set /a "count+=1"
set "string%count%=%count%: %dirname% (%locale%)"

проблема в том, что я могуНе выясните, как поступить после выбора подсказки.У меня есть errorlevel, но мне нужно подключить его к правильному %dirname%, чтобы я мог продолжить.все мои идеи сводятся к тому, чтобы поместить переменные в переменные, что приводит к слишком большому количеству % ... Я не могу обдумать это.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018
call :locations

rem Too many files causes error.
if errorlevel 1 exit /b 1

rem Probably no files if choices is undefined.
if not defined choices exit /b 2

choice /c %choices%q /n /m "select the saved directory number you want to re-enter or Q to quit: "
call :locations %errorlevel%

rem Probably entered q if dirname is undefined.
if not defined dirname exit /b 0

echo dirname is "%dirname%".
echo locale is "%locale%".
exit /b

:locations
setlocal
set "count=0"
set "chosen=%~1"

if not defined chosen (
    rem Display menu and set choices.

    for %%s in ("%appdata%\lootbot\locations\*") do (
        set /a "count+=1"
        set /p locale=<"%%~s"
        call echo %%count%%: %%~s (%%locale%%^)
        call set "choices=%%choices%%%%count%%"
    )

    set "locale="
) else (
    rem Set dirname and locale.

    for %%s in ("%appdata%\lootbot\locations\*") do (
        set /a "count+=1"

        @rem If current is 0, then replace 0 with nothing makes current undefined.
        set /a "current=chosen-count"
        call set "current=%%current:0=%%"

        if not defined current (
            set /p locale=<"%%~s"
            set "dirname=%%~s"
        )
    )
)

if %count% gtr 9 exit /b 1

rem Set nonlocal variables.
endlocal & (
    set "choices=%choices%"
    set "dirname=%dirname%"
    set "locale=%locale%"
)
exit /b

call :locations без аргументов установит chosen в значение undefined, которое выполняет 1-й цикл for для отображения меню.choices будет set со строкой целых чисел, которая будет использоваться с командой choice.

call :locations %errorlevel% установит chosen в значение аргумента.2-й цикл for выполнен.Если chosen - это то же значение, что и count, то current будет установлено на 0, поскольку число минус то же число равно нулю.Если ноль заменяется на ноль, то ток не определен, что означает установку dirname и locale.

В конце call, choices, dirname и localeбудет установлен в нелокальной области.

dirname и locale будет отображаться в конце скрипта для отображения результата.

0 голосов
/ 19 октября 2018

Боюсь, я не совсем понимаю, о чем ваша просьба ... Однако, возможно, этот код может вам помочь:

setlocal EnableDelayedExpansion

. . .

set "choices= 123456789ABCDEFGHIJKLMNOPQRSTUVW" & rem Max = 32

set "count=0"
for %%s in ("%appdata%\lootbot\locations\*") do (
   set /A count+=1
   if !count! gtr 32 echo Too many & pause & exit /B
   for /F %%c in ("!count!") do (
      set /P "locale[%%c]=" < "%%s"
      set "dirname[%%c]=%%~s"
      echo !choices:~%%c,1!: !dirname[%%c]! (!locale[%%c]!^)
   )
)

choice /c !choices:~1,%count%!X /n /m "select the saved directory you want to re-enter or X to eXit: "
echo errorlevel: %errorlevel%
echo Selected dirname: !dirname[%errorlevel%]!
echo Selected locale:  !locale[%errorlevel%]!

Предлагаю вам прочитать этот пост .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...