我制作了一个角色文件,我的游戏从中提取数据和变量。看起来像这样:
playerName= Marche
playerRace= Elf
playerHP= 100
playerSPD= 200
playerATK= 120
playerDEF= 70
最终幻想引用任何人......?无论如何,当角色升级时,我需要一个批处理脚本来找到字符串“playerHP = 100”。 playerHP 在脚本中设置为变量。基本上,它需要当前的健康状况,并将其乘以120%,从而增加数量。如何回显该数学结果以替换当前数字?
例如,如果这没有任何意义,我有100健康。我升级,因此我的健康状况增加了120%,所以现在我有120健康。我想找到字符串“playerHP = 100”并将其替换为“playerHP = 120”。
如果可以避免,我不想下载任何其他命令(我已经看过几次)。非常感谢
编辑:不是搜索字符串而是替换我接受了jeb的建议,只是删除了文件并重新回显了所有数据。结果看起来像这样:set /a LeveledUpPlayerHP=(%ppHP%* 12) / (10)
set /a LeveledUpPlayerSPD=(%ppSPD%* 12) / (10)
set /a LeveledUpPlayerATK=(%ppATK%* 12) / (10)
set /a LeveledUpPlayerDEF=(%ppDEF%* 12) / (10)
echo Updating stats...
del "C:\Users\%USERNAME%\Desktop\CMDRPG\player\playerData.dll
ping 1.1.1.1 -n 1 -w 500 > nul
echo playerName= %playerName%>playerData.dll
echo playerRace= %playerRace%>>playerData.dll
echo playerHP= %LeveledUpPlayerHP%>>playerData.dll
echo playerSPD= %LeveledUpPlayerSPD%>>playerData.dll
echo playerATK= %LeveledUpPlayerATK%>>playerData.dll
echo playerDEF= %LeveledUpPlayerDEF%>>playerData.dll
在此部分代码之前加载了playerName和playerRace。 Ping仅用作等待函数,以便在回显新数据之前删除文件。好像工作还可以。谢谢大家
答案 0 :(得分:2)
试试这个(输出在%inifile%.new
):
@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION
SET "inifile=file"
FOR /f %%a IN ('^<"%inifile%" find /c /v ""') DO SET /a lines=%%a
< "%inifile%" (
FOR /l %%a IN (1,1,%lines%) DO (
SET "line="
SET /p "line="
IF NOT "!line:playerHP=!"=="!line!" (
FOR /f "tokens=2delims= " %%b IN ("!line!") DO SET /a HP=%%b*12/10
SET "line=playerHP= !HP!"
)
ECHO(!line!
))>"%inifile%.new"
输入/输出:
>type file playerName= Marche playerRace= Elf playerHP= 100 playerSPD= 200 playerATK= 120 playerDEF= 70 >test.bat >type file.new playerName= Marche playerRace= Elf playerHP= 120 playerSPD= 200 playerATK= 120 playerDEF= 70
答案 1 :(得分:2)
假设值在您的文件中出现的顺序无关紧要。如果是这样,那么以下内容将有效地“编辑”您的文件。
它首先使用FINDSTR来隔离当前的playerHP值,并使用FOR / F来解析字符串中的值。 SET / A增加playerHP。然后使用FINDSTR创建一个新文件,为playerHP写入除之外的所有当前值,然后将新的playerHP信息附加到末尾。
@echo off
set "file=gameData.txt"
for /f "tokens=2 delims==" %%N in ('findstr /bl "playerHP=" "%file%"') do set /a "newHP=%%N*120/100"
>"%file%.mod" (
findstr /blv "playerHP=" "%file%"
echo playerHP=%newHP%
)
move /y "%file%.mod" "%file%" >nul
但为什么要去那么麻烦呢。我认为你已经将所有值都作为环境变量存储在内存中。只需确保要存储在文件中的所有变量都以公共唯一前缀开头。在你的例子中,它们都以“玩家”开头,但你可能想要一些更通用的东西 - 也许是像#这样的符号。所以你可以拥有#playerName,#playerRace等。
只需根据需要更新内存中的值即可。当需要将当前游戏状态保存到文件时,您需要做的只是
>"gameData.txt" set #
每次包含所有当前值时,都会创建一个全新的文件。
要加载这些值,您可以完全按照jeb的建议进行操作:
for /f "usebackq delims=" %%A in ("gameData.txt") do set %%A
答案 2 :(得分:1)
要将数据保存在文件中,可以使用
之类的块(
echo playerName=%playerName%
echo playerRace=%playerRace%
echo playerHP=%playerHP%
) > player.ini
要加载它,您可以使用
for /F "delims=" %%L in (player.ini) do set "%%L"