使用.bat编码

时间:2018-04-13 09:58:59

标签: batch-file save load

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

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

我可能需要删除[播放器数据]和[广告资源]标头中的引文。这只是一个例子,会有更多的值和更多的细分。 我需要从一个段加载一个精确的值,就像你从ini那样。(但不是来自InI) Technoguyfication在他对[Save and Load .bat game]的回复中的ini文件中使用了这种格式。感谢任何帮助。我是一个严厉的初学者,所以请考虑一下。

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

道歉,谢谢。

1 个答案:

答案 0 :(得分:0)

删除那些包含部分名称的双引号肯定是可行的。

如果您愿意,您甚至可以使用 TAB s 使您的.sav文件看起来更漂亮,例如

(
    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"

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