在我目前正在处理的批处理文件中,我遇到了一个小问题。我有一个名为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}})并使用!%!然而,在外面,它们都没有给我所需的输出。
很抱歉,如果我以一种令人困惑的方式措辞,我希望你能提供帮助。
先谢谢了,
答案 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扩展阶段。
即使它看起来更复杂,也更快