将批处理GOTO与数组配合使用

时间:2019-06-02 20:05:32

标签: batch-file

我有一个数组,其中包含我所有的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

我使用a部分填充数组

然后我使用c部分跳转到代码中的特定部分。

但是,当我使用运行时,我得到“系统找不到指定的批处理标签-%ajump [1]%”(省略引号)

如果我将跳转代码更改为(删除一组%)

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

我收到“系统找不到指定的批次标签-房间”(省略引号)

ajump [1]读取dha

b部分与我有关,因为当我厌倦只是回声它时,它会回显它试图跳转到的相同值。但是,当我使用调用set | echo / p =时,它将回显数组的实际内容。

我可以使用此代码回显“数组”文件夹中所有数组的所有内容

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 :(得分:0)

我找到了答案。尽管我不知道为什么,但我仍需要在GOTO之前打个电话。