我正在制作一个包含大量数据值的程序。我需要以块的形式加载它们,但我可能最终将它们全部保存在一起。如果我使用这种格式将值加载到.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的回应在这种情况下非常有用。我错了,因为我说我是一个严厉的初学者。
道歉,谢谢。
答案 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"
在这种特殊情况下不需要双引号,因为字符串中没有要保留的字符,但我将它们作为最佳惯例使用。