Existe uma maneira de fazer um sistema de checkpoint em arquivos em lote? [duplicado]

Dec 20 2020

Existe uma maneira de fazer um sistema de checkpoint em arquivos em lote? Estou aprendendo batch sozinho e criando um jogo do tipo RPG baseado em texto, mas se o programa for fechado, ele começa no início do código, sem nenhum progresso salvo. Eu quero fazer um jogo complexo de longo prazo, mas não quero ter que lidar com um reinício do jogo todas as vezes. Existe uma maneira de salvar o progresso para que você possa reabrir o programa e reiniciar OU retomar de onde parou, com todas as opções anteriores intactas?

Respostas

1 Magoo Dec 20 2020 at 13:59

Possivelmente, o método mais fácil de salvar / recarregar é este:

Reserve um caractere (digamos, #) para ser usado como o primeiro caractere de todas as variáveis ​​que deseja registrar.

tão...

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

Para salvar todas as #variáveis, use

set #>filename

que salvaria #moneye #points, mas nãoaction

Para recarregar use

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

que irá recarregar todas as variáveis ​​salvas no arquivo - que são, é claro, apenas #variables.

T3RR0R Dec 20 2020 at 16:25

Além da resposta de magoo sobre um método de salvar / carregar muito eficiente (com uma pequena modificação): os perfis de usuário de script podem ser feitos da seguinte forma:

@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