gpt4 book ai didi

variables - 批处理 - 在另一个变量中回显变量的值?

转载 作者:行者123 更新时间:2023-12-01 02:20:59 26 4
gpt4 key购买 nike

在我目前正在处理的批处理文件中,我遇到了一个小问题。我有一个名为 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!然而,在外面,这两者都没有给我想要的输出。

最佳答案

您应该在这里使用延迟扩展以及 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 参数扩展阶段。

即使它看起来更复杂,它的速度要快得多

关于variables - 批处理 - 在另一个变量中回显变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20539834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com