CMD程序“for”循环错误

时间:2014-09-29 23:18:42

标签: cmd

echo off
set apk[0]=apk
for /r %%a in (.apk) do call array.bat add apk %%a
call array.bat len apk length
echo apk files found = %length%
for /l %%G in (1,1,%length%) do (
call array.bat getitem apk %%G item
echo %item%
)
echo Pick one:
set /p pick=
call array.bat getitem apk %pick% chose
echo.
echo You picked %chose%.
pause

在上面的代码中我得到apk数组的长度为9,但for循环打印ECHO是关闭10倍?! 我可以在用户选择正确显示的选项后访问数组o_O的各个元素以及代码。我做错了什么?

1 个答案:

答案 0 :(得分:3)

作为一个非常快速的解决方案,请尝试

call echo %%item%%

这是delayedexpansion的第7,863代。关于这个主题有数百个SO条目。在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}

因此,FOR ... DO (block)将在遇到IF (something) else (somethingelse)时使用%variables%的值执行。

解决此问题的两种常见方法是1)使用IF并使用setlocal enabledelayedexpansion代替!var!来访问已更改的%var%或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

请注意使用显示var更改值的CALL ECHO %%var%%var显示,但遗憾的是RESETS错误级别。

另请注意,使用原始代码显示的项目是先前运行中设置的最后项目。批处理中没有CALL ECHO %%errorlevel%%命令,因此环境更改将永久建立,而不会在每个批处理结束时退出。结果是你在受污染的环境中奔跑。