2013-12-12 56 views
3

在我目前正在处理的批处理文件上,遇到了一个小问题。我有一个名为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%(它由5个变量组成),并让这些变量的值回显。如果这没有意义,这是我的代码示例;

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%% 
) 

虽然Dimensions1.txt(其应被设置成%line1%第一)看起来像这样;

%b1%%b2%%b3%%b4%%b5% 

echo %%line%%h%%中%%的应取消海誓山盟出,不含%%h这应该是1。渴望成为; %line1%(正如我所说,它是%b1%%b2% etc...。),然而打印它们的值。

现在我所得到的是%line1%。我尝试了其他方法,例如,如有人对我最后(有点类似)的问题发表评论,请执行set percent=%%(与setlocal EnableDelayedExpansions)并使用!percent!在外面,但是,两者都没有给我期望的输出。

对不起,如果我以混乱的方式措辞,我希望你能帮上忙。

在先进的感谢,

回答

3

你应该在这里使用延迟扩展和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扩展。
又见

那么你可以使用延迟膨胀,而不是,所以在你的文件中,可以放置!b1!!b2!!b3!!b4!!b5!
并扩大这个,你可以使用嵌套的for循环

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参数扩展阶段。

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

+0

似乎我错了使用'!',更别说不使用Call了。这就像一个魅力,非常感谢你! – Destrotant

相关问题