批处理 - 另一个变量中变量的回声值?

时间:2013-12-12 09:41:52

标签: variables batch-file set

在我目前正在处理的批处理文件中,我遇到了一个小问题。我有一个名为Dimensions(number from 1-5, defined in a for /l loop).txt的文件,其中包含%b1%%b2%%b3%%b4%%b5%。我希望能够通过echo %b1%%b2%%b3%%b4%%b5%值来string1,例如set /p string1=<Dimensions1.txt是通过echo %string1%设置的。

换句话说,我希望能够使用for /l %%g in (1,1,%height%) do ( set /p line%%g=<Dimensions%%g.txt ) :Nextstep echo Use WASD to move over the map, and select tiles. for /l %%h in (1,1,%height%) do ( pause echo %line1% echo %%line%%h%% ) (由5个变量组成),并将这些变量的值设为echo'd。如果这没有意义,这是我的代码示例;

%line1%

虽然Dimensions1.txt(第一个应设置为%b1%%b2%%b3%%b4%%b5% )看起来像这样;

echo %%line%%h%%

%%h中,%%应该相互取消,排除1 %line1%%b1%%b2% etc...。渴望成为; %line1%(就像我说的那样,set percent=%%。),然而印刷他们的价值观。

现在我得到的只是setlocal EnableDelayedExpansions。我尝试过其他方法,例如,有人评论我的上一个(有点类似的)问题,做{{1}}(用{{1}})并使用!%!然而,在外面,它们都没有给我所需的输出。

很抱歉,如果我以一种令人困惑的方式措辞,我希望你能提供帮助。

先谢谢了,

1 个答案:

答案 0 :(得分:2)

你应该在这里使用延迟扩展,也可以使用CALL扩展。

setlocal EnableDelayedExpansion
...
for /l %%h in (1,1,%height%) do (
    call echo !line%%h!
)

首先%% h会扩展,所以你得到了 call echo !line1!

然后延迟扩展将完成 call echo %b1%%b2%%b3%%b4%%b5%

然后call会将百分比变量扩展为其内容

如果速度与此相关,则应完全避免call展开。
另请参阅Dostips:CALL me, or better avoid call

然后您可以使用延迟展开,因此在您的文件中,您可以放置​​!b1!!b2!!b3!!b4!!b5! 要扩展它,您可以使用嵌套的FOR-Loop

setlocal EnableDelayedExpansion
...
for /l %%h in (1,1,%height%) do (
    set "line=!line%%h!"
    FOR /F "delims=" %%L in ("!line!") DO echo %%L
)

在这种情况下,变量行的内容为!b1!!b2!!b3!!b4!!b5! 然后在For-Loop参数中,%% L也将是!b1!!b2!!b3!!b4!!b5!。 但这将在echo语句中扩展,因为延迟扩展阶段晚于FOR-Parameter扩展阶段。

即使它看起来更复杂,也更快