爲了編寫我一直在玩的遊戲的批處理模擬人生,我最近開始學習批處理。我想知道它是否可能以某種方式迭代像命名變量(因爲我似乎無法找到關於列表的任何內容?)。此外,我不確定是否可以將標籤作爲變量傳遞給調用者。是否有可能從批處理字符串中獲取變量?
代碼示例:
:: 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中包含的字符串中獲取值。
已解決 獲取無限循環,迭代變量未更新。
你能問題縮小到一個,只批問題,陳述投入和期望的產出?此外,顯示你到目前爲止嘗試過的。 – dovetalk
我沒有給你答案,但我建議你看看PowerShell,它比cmd更加程序員友好。 –
這是一個只有批次的問題。我試圖從%FORT%讀取%作爲變量%EFORTRESS1%,%EFORTRESS2%.... 如果我把變量作爲%EFORTRESS1,%EFORTRESS2%....它可以工作,但我「m試圖做一個簡短的函數,所以我不必多次編寫相同的代碼:S –