Есть ли способ сделать систему контрольных точек в пакетных файлах? [дубликат]

Dec 20 2020

Есть ли способ сделать систему контрольных точек в пакетных файлах? Я обучаю себя пакетной обработке и создаю текстовую игру типа RPG, но если программа закрывается, она запускается с самого начала кода без сохранения прогресса. Я хочу сделать сложную долгосрочную игру, но не хочу каждый раз сталкиваться с перезапуском игры. Есть ли способ сохранить прогресс, чтобы вы могли повторно открыть программу и либо перезапустить, либо продолжить с того места, где вы остановились, со всеми предыдущими вариантами без изменений?

Ответы

1 Magoo Dec 20 2020 at 13:59

Возможно, самый простой способ сохранения / перезагрузки следующий:

Зарезервируйте символ (скажем #) для использования в качестве первого символа всех переменных, которые вы хотите записать.

так...

set #points=35
set action=3
set #money=22

Чтобы сохранить все #переменные, используйте

set #>filename

что спасло бы #moneyи #points, но неaction

Для перезагрузки используйте

for /f "delims=" %%a in (filename) do set "%%a"

который перезагрузит все переменные, сохраненные в файле, которые, конечно же, являются только #variables.

T3RR0R Dec 20 2020 at 16:25

В дополнение к ответу 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