我尝试使用Windows批处理文件创建菜单选项。
当我使用创建变量i的for循环,并使用它来调用!something[%%i]!
变量[i]时,它可以很好地工作。
但是,当我尝试从用户输入创建变量j,并使用它来使用!something[%%j]!
调用变量[j]时,它不起作用。
我不确定为什么它将变量j与变量i区别对待,但似乎只能使用!j!
而不是%%j
来调用j
@echo off
setlocal EnableDelayedExpansion
set something[0]=aaaa
set something[1]=bbbb
set something[2]=cccc
set something[3]=dddd
set something[4]=eeee
set something[5]=ffff
set something[6]=gggg
for /l %%i in (0,1,6) do echo %%i. !something[%%i]!
set /p j="Input selection: "
echo.
echo j=%%j
echo j=!j!
echo.
set Selection=!something[%%j]!
echo Selection = !Selection!
pause
以下是示例输出:
0. aaaa
1. bbbb
2. cccc
3. dddd
4. eeee
5. ffff
6. gggg
Input selection: 3
j=%j
j=3
Selection =
Press any key to continue . . .
答案 0 :(得分:2)
临时%%变量仅在FOR语句中有效。您试图在FOR循环之外使用%% j。以下是获得所需结果的两种方法。
@echo off
setlocal EnableDelayedExpansion
set something[0]=aaaa
set something[1]=bbbb
set something[2]=cccc
set something[3]=dddd
set something[4]=eeee
set something[5]=ffff
set something[6]=gggg
for /l %%i in (0,1,6) do echo %%i. !something[%%i]!
set /p j="Input selection: "
echo.
echo j=%j%
echo.
set Selection=!something[%j%]!
echo Selection = %Selection%
pause
或
@echo off
set something[0]=aaaa
set something[1]=bbbb
set something[2]=cccc
set something[3]=dddd
set something[4]=eeee
set something[5]=ffff
set something[6]=gggg
for /l %%i in (0,1,6) do call echo %%i. %%something[%%i]%%
set /p j="Input selection: "
echo.
echo j=%j%
echo.
call set Selection=%%something[%j%]%%
echo Selection = %Selection%
pause
答案 1 :(得分:1)
您将参数 %%j
的与变量 %j%
混淆。以下示例可能会使这种差异更加明显:
for %%j in (%j%) do set Selection=!something[%%j]!
但是,在这种情况下,您可以直接使用:
set Selection=!something[%j%]!
您也可以使用此表单:
call set Selection=%%something[%j%]%%
不需要延迟扩展,但速度较慢。
但是,如果将set命令放在括号内(即,在多行IF或FOR命令中),则可以使用某些形式。有关所有这些变体的详细信息,请参阅this post。