क्या बैच फ़ाइलों में एक चेकपॉइंट सिस्टम बनाने का एक तरीका है? [डुप्लिकेट]

Dec 20 2020

क्या बैच फ़ाइलों में एक चेकपॉइंट सिस्टम बनाने का एक तरीका है? मैं खुद को बैच सिखा रहा हूं, और एक पाठ-आधारित आरपीजी प्रकार का खेल बना रहा हूं, लेकिन अगर कार्यक्रम बंद हो गया है, तो यह कोड की शुरुआत में वापस शुरू होता है, जिसमें कोई प्रगति नहीं बचती है। मैं एक जटिल दीर्घकालिक खेल बनाना चाहता हूं, लेकिन मैं हर बार खेल को फिर से शुरू करने से निपटना नहीं चाहता। क्या प्रगति को बचाने का एक तरीका है ताकि आप कार्यक्रम को फिर से खोल सकें और या तो फिर से शुरू कर सकें या फिर से शुरू कर सकें, जहां आपने पिछले सभी विकल्पों को बरकरार रखा है?

जवाब

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"

जो फ़ाइल में सहेजे गए सभी चरों को पुनः लोड करेगा - जो निश्चित रूप से, केवल # चर हैं।

T3RR0R Dec 20 2020 at 16:25

एक बहुत ही कुशल बचाने / लोड विधि के बारे में मैगु के जवाब के अलावा, (एक मामूली संशोधन के साथ): स्क्रिप्टिंग उपयोगकर्ता प्रोफाइल को इस तरह किया जा सकता है:

@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