क्या बैच फ़ाइलों में एक चेकपॉइंट सिस्टम बनाने का एक तरीका है? [डुप्लिकेट]
क्या बैच फ़ाइलों में एक चेकपॉइंट सिस्टम बनाने का एक तरीका है? मैं खुद को बैच सिखा रहा हूं, और एक पाठ-आधारित आरपीजी प्रकार का खेल बना रहा हूं, लेकिन अगर कार्यक्रम बंद हो गया है, तो यह कोड की शुरुआत में वापस शुरू होता है, जिसमें कोई प्रगति नहीं बचती है। मैं एक जटिल दीर्घकालिक खेल बनाना चाहता हूं, लेकिन मैं हर बार खेल को फिर से शुरू करने से निपटना नहीं चाहता। क्या प्रगति को बचाने का एक तरीका है ताकि आप कार्यक्रम को फिर से खोल सकें और या तो फिर से शुरू कर सकें या फिर से शुरू कर सकें, जहां आपने पिछले सभी विकल्पों को बरकरार रखा है?
जवाब
संभवतः सबसे आसान बचत / पुनः लोड विधि यह है:
एक वर्ण (कहते हैं #
) , को उन सभी चरों के पहले वर्ण के रूप में उपयोग किया जाना चाहिए जिन्हें आप रिकॉर्ड करना चाहते हैं।
तोह फिर...
set #points=35
set action=3
set #money=22
सभी #
चर को बचाने के लिए , का उपयोग करें
set #>filename
जो बचा सकता है #money
और #points
, लेकिन नहींaction
उपयोग पुनः लोड करने के लिए
for /f "delims=" %%a in (filename) do set "%%a"
जो फ़ाइल में सहेजे गए सभी चरों को पुनः लोड करेगा - जो निश्चित रूप से, केवल # चर हैं।
एक बहुत ही कुशल बचाने / लोड विधि के बारे में मैगु के जवाब के अलावा, (एक मामूली संशोधन के साथ): स्क्रिप्टिंग उपयोगकर्ता प्रोफाइल को इस तरह किया जा सकता है:
@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