घटनास्थल के लिए थोड़ा देर से लेकिन यहाँ वैसे भी जाता है। नीचे Windows बैच स्क्रिप्टिंग में स्टैक डेटा संरचना का कार्यान्वयन है।
विशेषताएं:
- आपको कॉल करना होगा : स्टैक का उपयोग करने से पहले InitializeStack सबरूटीन।
- स्टैक पर आइटम पुश करें : पुश सबरूटीन।
- पॉप आइटम को स्टैक से कॉल करें : पॉप सबरूटीन।
- वैरिएबल $ काउंट में हमेशा स्टैक में वस्तुओं की गिनती शामिल होगी।
- चर $ शीर्ष में हमेशा स्टैक में जोड़ा गया सबसे हाल का आइटम होगा।
- चर $ नीचे हमेशा स्टैक में जोड़ा गया पहला आइटम होगा।
- आप डंपस्टैक सबरूटीन : को कॉल करके स्टैक की सामग्री को डंप कर सकते हैं ।
- स्टैक पर आप जिस प्रकार की वस्तुओं को धक्का दे सकते हैं वह कुछ भी है जिसे एक चर में संग्रहीत किया जा सकता है। उदाहरण के लिए, कॉल: पुश "स्ट्रिंग 1" , कॉल: पुश "% 1" , कॉल: पुश "% MyVariable" , आदि।
मैं सबरूटीन कॉल का ट्रैक रखने के लिए अपने बैच फ़ाइलों में स्टैक का उपयोग करता हूं। मेरे बैच फ़ाइलों में हर सबरूटीन कॉल से शुरू होता है : पुश% 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
इसलिए, सभी पर्यावरण चर को पुश करने के लिए जिन्हें आप कॉल कर सकते हैं: PushAllEnvironmentVariables, सभी पर्यावरण चर को पुनर्स्थापित करने के लिए, आप कॉल कर सकते हैं: PopAllEnvironmentVariables
PATH
- केवल उदाहरण के लिए या किसी कारण से। मैं विशेष रूप से पथ चर को पुश / पॉप करने में रुचि रखता हूं। क्या ऐसा कुछ है जो बैकअप / पुनर्स्थापना के खिलाफ बोलता हैPATH
?