我想用提示变量显示数组的内容。
所以,我做了以下代码:
::Create an array
SET country[0]=Albania
SET country[1]=Argentina
SET country[2]=Australia
SET country[3]=Austria
SET country[4]=Belgium
::Create a menu
SET /P C=Type the number of your country, then press ENTER:
SET /A C_num=%C%
ECHO.
for /L %%a in (0, 1, 59) do call ECHO %%a - %%country[%%a]%%
ECHO.
我尝试了以下代码来显示相应的国家:
ECHO %country[!C_num!]%
但是,它没有成功地显示内容。
你能帮我修一下吗?
1条答案
按热度按时间fiei3ece1#
嗯……好吧,TBH,如果你成功了,你就不需要问这个问题了……
所以-为了解决你的问题,我们需要知道更多的信息。首先是关于你的文件是如何开始的。
它关闭了默认的命令回显,以避免屏幕混乱,然后建立了一个“本地环境”,该环境具有有用的属性,即当批处理结束时,在运行批处理时修改的所有变量都将恢复到其原始值(批处理开始时的值)。这可以防止在同一会话中运行的后续批处理继承 this batch所做的修改。
下一个问题是
set
语句的格式。使用set "var=value"
设置字符串值-这可以避免尾随空格引起的问题。不要分配"
或终止反斜杠或空格。从元素构建路径名-这可能会使过程更容易。如果使用语法set var="value"
,则引号将成为所分配值的一部分。还有个小怪癖如果只按Enter键,
SET /P "var=Prompt"
不会改变var
。因此,如果var
最初是空的,它仍然是空的。使用如图所示的引号,您可以在Prompt
的末尾添加一个空格。我建议你最好在你要求选择之前显示你的列表--这可能会让你更容易一点。
你有一个很长的列表要显示,其中一些条目是空的。你可以修改你的
%%a
循环到…do if defined country[%%a] echo …
,这可能会缩短显示的列表,不显示任何未定义的country[?]
。批量中的变量是always字符串。可用的数学函数将变量内容转换为数字以执行计算,然后再转换回要分配的字符串或
echo
ed。因此,“转换”C
到C_num
实际上什么也没有实现。country[%C%]
与country[%C_num%]
完全相同。您还没有告诉我们您在尝试
ECHO %country[!C_num!]%
时得到了什么。您需要彻底了解Delayed expansion因此,您需要首先调用
delayedexpansion
,然后调用ECHO !country[%C_num%]!
另一方面,您可以尝试调整以下内容:Menu with 3 columns使用
choice
-首选,因为它避免了处理潜在的随机用户输入。