Windows Batch:如何根据用户输入选择并输出数组元素
Windows Batch脚本实现数组元素选择回显
你的问题出在数组索引的变量引用方式上,Batch里用延迟扩展处理数组的动态索引时,不能用%%number这种写法——%%是for循环专属的变量占位符,这里完全不适用。要实现动态索引的数组取值,得用嵌套延迟扩展的写法。
修正后的代码
@echo off setlocal EnableDelayedExpansion set test[1]=a set test[2]=b set test[3]=c set test[4]=d set /p number="Select array element: " set /a numberAux=!number!+0 echo: 1.: !test[2]! echo: 2.: !test[!number!]! echo: 3.: !test[!numberAux!]! timeout /t 3 /nobreak > NUL endlocal
关键修改说明
- 把
!test[%%number]!改成!test[!number!]!:内层的!number!会先解析为用户输入的数字,再作为索引去取test数组对应的值 numberAux的引用同理改成!test[!numberAux!]!,这样就能正确解析转换后的整数索引
运行效果
输入2后,输出会变成:
Select array element: 2 1.: b 2.: b 3.: b
额外提示
如果要避免用户输入非数字导致的异常,可以加个简单的输入验证:
set /p number="Select array element: " rem 验证输入是否为有效数字 set /a numberAux=!number!+0 2>nul if !errorlevel! neq 0 ( echo 请输入有效数字! timeout /t 3 /nobreak > NUL exit /b )
内容的提问来源于stack exchange,提问作者Roberto Fernández
相关产品推荐
相关产品推荐

