我不确定我是否理解了脚本样例最后一行中的评估顺序,即使是您的口头解释。不过,我想至少我可以通过简单的例子向你展示如何实现你想要的东西,并且你将研究如何在你的情况下应用这种技术。
基本上,你需要在这里使用两种扩展:立即(或者%
扩展)并延迟。
在批处理文件中存在延迟扩展,必须首先启用(通常使用命令SETLOCAL EnableDelayedExpansion
),然后使用!
而不是%
进行变量评估。考虑下面的例子:
SET ind=1
SET line%ind%=ABC
SETLOCAL EnableDelayedExpansion
ECHO !line%ind%!
ENDLOCAL
在上述例子中,两个变量被创建,ind
和line1
。第二个名字部分用第一个变量构造。当你为设置这个变量的值时,不需要延迟扩展,因为不需要评估赋值的左侧部分名称。但是当它需要评估时,你需要使用延迟扩展。在上述脚本中的命令ECHO
这样工作的:
尽管这种延迟扩展是最常见的优选的,在上述例子中也可以使用CALL
-expansion实现相同的。下面是重写使用CALL
-expansion同样的例子脚本:
SET ind=1
SET line%ind%=ABC
CALL ECHO %%line%ind%%%
基本上,有%
扩张一路,但不同地区在不同的时间进行评估。下面是第二个例子中的延迟评价是如何工作的:
CALL
扩展比较慢,这可能特别表现在循环中。另一方面,!
扩展具有一些含义,特别是因为使用SETLOCAL
命令来启用语法。关于my answer to a different question的话题还有更多。
我不确定要达到什么效果,但是您是否搜索FOR/F,请参阅http://ss64.com/nt/for_cmd.html – 2013-02-17 14:06:05