Есть ли способ сделать систему контрольных точек в пакетных файлах? [дубликат]
Есть ли способ сделать систему контрольных точек в пакетных файлах? Я обучаю себя пакетной обработке и создаю текстовую игру типа RPG, но если программа закрывается, она запускается с самого начала кода без сохранения прогресса. Я хочу сделать сложную долгосрочную игру, но не хочу каждый раз сталкиваться с перезапуском игры. Есть ли способ сохранить прогресс, чтобы вы могли повторно открыть программу и либо перезапустить, либо продолжить с того места, где вы остановились, со всеми предыдущими вариантами без изменений?
Ответы
Возможно, самый простой способ сохранения / перезагрузки следующий:
Зарезервируйте символ (скажем #) для использования в качестве первого символа всех переменных, которые вы хотите записать.
так...
set #points=35
set action=3
set #money=22
Чтобы сохранить все #переменные, используйте
set #>filename
что спасло бы #moneyи #points, но неaction
Для перезагрузки используйте
for /f "delims=" %%a in (filename) do set "%%a"
который перезагрузит все переменные, сохраненные в файле, которые, конечно же, являются только #variables.
В дополнение к ответу magoo относительно очень эффективного метода сохранения / загрузки (с небольшими изменениями): создание сценариев профилей пользователей может быть выполнено следующим образом:
@Echo off
rem /* predefine your key variables prior to this loop */
:name :# load point
Set /P "name=Enter your name: "
If Not "%name%" == "" (
rem /* If character exists; load */
If Exist "%~n0_%name%.bat" (
Call "%~n0_%name%.bat"
rem /* Initialise character save using predefined variables if character new */
) Else ( Call :Save )
rem /* Force Assignment of name variable */
) Else ( Goto name )
===============================================
::: Script body
::: End of Script
Goto :Eof
===============================================
:Save :# function
rem /* variation on magoo's method of saving */
(For /F "Delims=" %%G in ('Set #')Do Echo/Set "%%G")>"%~n0_%name%.bat"
Exit /B 0