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
будет отображаться в конце скрипта для отображения результата.