দৃশ্যে কিছুটা দেরি হলেও এখানে যাই হোক। নীচে উইন্ডোজ ব্যাচ স্ক্রিপ্টিংয়ে স্ট্যাক ডেটা স্ট্রাকচারের একটি বাস্তবায়ন রয়েছে।
বৈশিষ্ট্য:
- স্ট্যাকটি ব্যবহার করার আগে আপনাকে অবশ্যই : ইনিশিয়ালস্ট্যাক স্ট্রোক সাবট্রিনটি কল করতে হবে ।
- স্ট্যাকের উপর আইটেমগুলি পুশ করুন : সাববুটিন পুশ করুন ।
- স্টপ থেকে পপ আইটেমগুলি কল করুন : পপ সাববুটিন।
- পরিবর্তনশীল $ গণনা সর্বদা স্ট্যাকের আইটেমগুলির গণনা ধারণ করে।
- পরিবর্তনশীল $ শীর্ষে সর্বদা স্ট্যাকটিতে যুক্ত হওয়া সাম্প্রতিকতম আইটেম থাকবে।
- পরিবর্তনশীল $ নীচে সর্বদা স্ট্যাকের সাথে যুক্ত প্রথম আইটেমটি থাকবে।
- আপনি স্ট্যামের সামগ্রীটি: ডাম্পস্ট্যাক সাবরুটিন কল করে ডাম্প করতে পারেন ।
- স্ট্যাকের ধরণের ধরণের আইটেমগুলি এমন কোনও যা ভেরিয়েবলের মধ্যে সংরক্ষণ করা যায়। উদাহরণস্বরূপ, কল করুন: "স্ট্রিং 1" পুশ করুন , কল করুন: "% 1" চাপুন , কল করুন: "% মাইভেরিবেল%" , ইত্যাদি পুশ করুন etc.
সাবউটাইন কলগুলি ট্র্যাক রাখতে আমি আমার ব্যাচ ফাইলগুলিতে স্ট্যাকটি ব্যবহার করি। আমার ব্যাচের ফাইলগুলির প্রতিটি সাব্রোটিন কল: পুশ% 0 দিয়ে শুরু হয় , যা বর্তমান সাব্রোটিনের নামটি স্ট্যাকের উপরে ঠেলে দেয় এবং কল: পপ দিয়ে শেষ হয় ।
কেউ কেউ এটিকে ব্যাচের স্ক্রিপ্টিংয়ের জন্য একটি ওভার-কিল মনে করতে পারে তবে আমি এটি তৈরি করে উপভোগ করেছি এবং আমি আশা করি যে কেউ এই দরকারী, উপভোগ করবেন ।
@Echo Off
Cls
SetLocal
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
Call :InitializeStack
Call :Push "String 1"
Call :Push "String 2"
Call :Push "String 3"
Call :Pop
Echo Total items in stack = !$Count!
Echo Top of stack = !$Top!
Echo Bottom of stack = !$Bottom!
Call :DumpStack
Goto End
:InitializeStack
:------------------------------------------------------------
Set "$Stack[0]=0"
Set "$Count=!$Stack[0]!"
Set "$Top="
Set "$Bottom="
Exit /b
:DumpStack
:------------------------------------------------------------
If !$Stack[0]! EQU 0 (
Echo Stack is empty.
) Else (
Echo.
Echo Stack Dump
Echo ----------
For /l %%a In (!$Stack[0]!,-1,1) Do (Echo !$Stack[%%a]!)
)
Exit /b
:Push <String>
:------------------------------------------------------------
Set /a "$Stack[0]+=1"
Set "$Count=!$Stack[0]!"
Set "$Top=%~1"
Set "$Bottom=!$Stack[1]!"
Set "$Stack[!$Stack[0]!]=!$Top!"
Exit /b
:Pop
:------------------------------------------------------------
If !$Stack[0]! EQU 0 (
Echo "Stack is empty."
) Else (
Set "$Stack[!$Stack[0]!]="
Set /a "$Stack[0]-=1"
Set "$Count=!$Stack[0]!"
If !$Stack[0]! GTR 0 (
For %%a In (!$Stack[0]!) Do Set "$Top=!$Stack[%%a]!"
Set "$Bottom=!$Stack[1]!"
) Else (
Set "$Top="
Set "$Bottom="
)
)Exit /b
:PushAllEnvironmentVariables
:------------------------------------------------------------
For /f "Tokens=* Delims=" %%a In ('Set') Do Call :Push "%%a"
Exit /b
:PopAllEnvironmentVariables
:------------------------------------------------------------
For /l %%a In (!$Stack[0]!,-1,1) Do (Set !$Stack[%%a]!)
Exit /b
:End
সুতরাং, সমস্ত পরিবেশের ভেরিয়েবলগুলিকে ধাক্কা দেওয়ার জন্য আপনি কল করতে পারেন: পুশআলইনমায়ার্নেশিয়াল ভেরিয়েবলগুলি, সমস্ত পরিবেশের ভেরিয়েবল পুনরুদ্ধার করতে, আপনি কল করতে পারেন: পপএলএলনোভারমেন্টভেরিয়েবল
PATH
- কেবল উদাহরণস্বরূপ বা কোনও কারণে। আমি বিশেষভাবে পাথ চলক পরিবর্তন / পপ করতে আগ্রহী। এমন কিছু আছে যা ব্যাকআপ / পুনরুদ্ধারের বিরুদ্ধে কথা বলেPATH
?