我最近开始学习批处理,以便为我一直在玩的游戏编写批量模拟游戏。我想知道是否有可能以某种方式迭代像命名变量(因为我似乎无法找到关于列表的任何内容?)。此外,我不确定我是否可以将标签作为传递的变量调用。
代码示例:
:: Enemy Fortress level.
SET EFORTLVL=4
:: Don't mess with anything below here only the variables above.
:: Enemy Fortress that will be simmmed against. Note this batch sim is only built to run against one tower, as this is what you should be doing.
SET EFORTRESS1="Foreboding Archway-%EFORTLVL%"
SET EFORTRESS2="Illuminary Blockade-%EFORTLVL%"
SET EFORTRESS3="Tesla Coil-%EFORTLVL%"
SET EFORTRESS4="Minefield-%EFORTLVL%"
SET EFORTRESS5="Forcefield-%EFORTLVL%"
call :sim 1
:sim
SET /a "COUNTER=1"
SETLOCAL enabledelayedexpansion
SET times=!ITERATIONS%1!
ENDLOCAL & SET TIMES=%times%
:whilesim
SETLOCAL enabledelayedexpansion
SET fort=!EFORTRESS%COUNTER%!
ENDLOCAL & SET FORT=%fort%
tuo.exe %DECK0% %ENEMY% surge random -v efort %FORT% yfort %YFORTRESSES% climb %TIMES% >> %PATH%\WarDefClimbData%DECK0%.txt
SET /a "COUNTER=COUNTER+1"
if %COUNTER% leq 5 GOTO :whilesim else GOTO :eof
我在控制台上获得该行的结果:
解决: 我想要做的是从一个变量中获取一个值,该变量包含与所讨论的变量相关的字符串名称。 (例如,当for循环通过1时我想获得EFORTRESS1值,2我想要EFORTRESS2值等)。
E:\Programs\Tyrant Unleashed Optimizer>tuo.exe oconzer "VetDecks" surge random -v efort EFORTRESS1 yfort "Inspiring Altar #2" climb ITERATIONS1 1>>"e:\Programs\Tyrant Unleashed Optimizer\BatchSimResults"WarDefClimbDataoconzer.txt
Error: unrecognized fortress EFORTRESS1
现在我理解为什么它说错误,我不明白为什么它没有从FORT中包含的字符串中获取值。
分辨 得到一个无限循环,迭代变量没有更新。
答案 0 :(得分:0)
:sim
SETLOCAL ENABLEDELAYEDEXPANSION
SET "FORT=!EFORTRESS%1!"
ENDLOCAL&SET "fort=%fort%"
SET TIMES=ITERATIONS%2
SET LABEL=%3
问题是获取(变量的内容)的内容,通常称为“间接”。
这可能是最简单的方法。它使用setlocal enabledelayedexpansion
将cmd
置于delayedexpansion
模式,其中<{1}}在其内容之后被评估
缺点是使用!var!
调用必须,这会建立一个本地环境。 loacl环境最终必须关闭(你不能继续打开更多),那时,对环境的所有更改都将被丢弃,并在执行setlocal
时恢复到其状态。
setlocal
使用解析技巧将更改传输出endlocal&...
括号。
至于其他问题 - 是的,你可以setlocal/endlocal
一个变量(并且变量的内容不需要有前导冒号)。例如,很有可能使用goto
,并提供goto somewhere%1
作为参数。文本%1
将简单地添加到值somewhere
。
BTW - 您似乎正在更改%1
。这不是一个好主意。 path
是包含path
- 分隔的目录列表的变量,如果在当前目录中调用该可执行文件,则会搜索可执行文件。最好独自留下。 ;
和tmp
(指向临时目录)和temp
以及date
和time
以及random
(当前日期)也是如此,时间,随机数和当前目录)