使用 .bat 编码从 .sav 文件分段保存和加载

Save and load from .sav files in sections with .bat coding

我正在批量制作一个包含大量数据值的程序。我需要分块加载它们,但我最终可能会将它们全部保存在一起。如果我使用这种格式将值加载到 .sav 文件,我将如何从特定组加载它们?

(
    echo "[playerdata]"
    echo playername=%playername%
    echo playerlevel=%playerlevel%
    echo "[inventory]"
    echo playerslotone=%playerslotone%
    echo plrslot1amnt=%plrslot1amnt%
) > savegame.sav

我可能需要从 [player data] 和 [inventory] ​​中删除报价 headers。这只是一个例子,会有更多的价值和更多的细分市场。 我需要从一个段中加载一个精确的值,就像你从 ini 中加载一样。(但不是从 InI 中) Technoguyfication 在他对 [Save and Load .bat game] 的回应中的 ini 文件中使用了这种格式。感谢任何帮助。我是一个重度初学者,所以请考虑一下。

如果这似乎是重复的,我很抱歉。它不应该,因为我正在从 .sav 文件加载和保存,并使用新路径而不是仅使用命令。 Compo 的回应在这种情况下非常有帮助。我可能是错的,因为我说我是一个严重的初学者。

非常抱歉,谢谢。

当然建议删除那些包含部分名称的双引号。

您甚至可以使 .sav 文件看起来更漂亮,通过使用 TABs 和 s ,如果你愿意,例如

(
    Echo [PlayerData]
    Echo PlayerName     = %PlayerName%
    Echo PlayerLevel    = %PlayerLevel%
    Echo=
    Echo [Inventory]
    Echo PlayerSlotOne  = %PlayerSlotOne%
    Echo PlrSlot1Amnt   = %PlrSlot1Amnt%
)>"SaveGame.sav"

如果将以下内容复制到主批处理文件中:

:LoadSection
If Not Exist "%~2" GoTo :EOF
Set "#="
For /F "Delims=:" %%A In ('"FindStr /BINC:"[%~1]" "%~2""') Do Set "#=%%A"
If Not Defined # GoTo :EOF
For /F "Tokens=1* Delims==" %%A In ('More +%#% "%~2"') Do (
    Echo=%%A|FindStr /BC:"[">Nul && (For %%C In (# $A $B) Do Set "%%C="
        GoTo :EOF)
    Set "$A=" & Call :Isolate %%A & Call :Isolate %%B
    Call Set "%%$A%%=%%$B%%")
GoTo :EOF

:Isolate
If Not Defined $A (Set "$A=%*") Else Set "$B=%*"
GoTo :EOF

然后您应该能够调用从特定部分加载变量,如下所示:

Call :LoadSection "Inventory" "SaveGame.sav"

在这种特殊情况下不需要双引号,因为字符串中没有要保留的字符,但我将它们用作最佳实践习惯。