Использование пакетного GOTO с массивами - PullRequest
0 голосов
/ 02 июня 2019

У меня есть массив, содержащий все мои имена тегов GOTO. Я хочу иметь возможность использовать переменную в качестве индекса массива и использовать ее для перехода к определенной части моего кода. Мой код будет запрашивать у пользователя ввод данных, и в зависимости от того, на каком экране он находится (% room%), вводимые им данные будут переходить к определенной точке в моем коде.

Я довольно новичок в партии, и большая часть моего кода модифицирована из Интернета. в папке с этим файлом у меня есть еще одна папка под названием «Массивы». В этой папке у меня есть куча текстовых файлов, которые содержат мои элементы Array. Мои массивы заполняются с помощью этих текстовых файлов, и имя файла становится именем массива.

Вот мой код

@Echo Off
set /A room=1

::--part a (populating arrays) ----------------------
set "file=%~dp0Arrays"

For /R %file% %%G IN (*.txt) DO (
    set /A i=0
    for /F "usebackq delims=" %%a in ("%%G") do (
    set /A i+=1
    call set %%~nG[%%i%%]=%%a
    call set n=%%i%%
    )
)

::--part b (populating arrays) ----------------------
echo %%ajump[%room%]%%
:: returns %roomtext[1]%

call echo|set /p=%%ajump[%room%]%%
:: returns dha

echo.

::--part c (jumping to point in  code using array)-----


SET /P choice= Type your choice: 
if /I %choice%==a (goto %%ajump[%room%]%%)

exit

::--part d (code to jump to) ----------------------
:dha
 ehco succsess
 pause

 exit

Я заполняю свои массивы частью а

Затем я использую часть c, чтобы перейти к определенной части в коде.

Однако, когда я использую команду run this, я получаю «Система не может найти указанную метку пакета -% ajump [1]%» (пропустить кавычки)

и если я изменю код перехода на (удалить набор%)

    if /I %choice%==a (goto %ajump[%room%]%)

Я получаю "Система не может найти указанную метку партии - номер комнаты" (пропустить кавычки)

ajump [1] читает дха

Часть b касается меня, потому что, когда я устаю просто повторять его, он повторяет то же значение, к которому пытается перейти. однако, когда я использую вызов set | echo / p =, он отображает фактическое содержимое массива.

С помощью этого кода я могу отобразить все содержимое всех массивов в папке 'Arrays'

For /R %file% %%F IN (*.txt) DO (
    echo %%%%~nF
    for /L %%i in (1,1,10) do call echo %%%%~nF[%%i]%%
    echo.
)

Является ли мое утверждение if неверным или это может быть моя метка перехода. Поскольку он повторяет тот же текст, в котором он пытается прыгнуть, я считаю, что проблема заключается в том, как я называю массивы.

1 Ответ

0 голосов
/ 02 июня 2019

Я нашел ответ. Мне нужно позвонить до моего GOTO, хотя я не знаю почему.

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