Sahneye biraz geç ama yine de burada. Aşağıda, Windows toplu komut dosyasında yığın veri yapısının bir uygulaması yer almaktadır.
Özellikleri:
- Yığını kullanmadan önce : InitializeStack alt yordamını çağırmalısınız .
- Aşağıdakileri arayarak yığındaki öğeleri itin : Push altyordam.
- : Pop altyordamını çağırarak öğeleri yığından çıkarın .
- $ Count değişkeni her zaman yığındaki öğe sayısını içerir.
- $ Top değişkeni her zaman yığına eklenen en son öğeyi içerir.
- $ Bottom değişkeni her zaman yığına eklenen ilk öğeyi içerir.
- DumpStack altyordamını çağırarak yığının içeriğini dökebilirsiniz .
- Yığına basabileceğiniz öğelerin türü, bir değişkende saklanabilecek her şeydir. Örneğin, Call: Push "String 1" , Call: Push "% 1" , Call: Push "% MyVariable%" , vb.
Alt program çağrılarını izlemek için toplu iş dosyalarımdaki yığını kullanıyorum. Toplu iş dosyalarımdaki her alt yordam , geçerli alt yordamın adını yığına iten ve Call: Pop ile biten Call: Push% 0 ile başlar .
Bazıları toplu betik için aşırı bir ölüm bulabilir ama ben onu oluşturmaktan keyif aldım ve umarım birisi bunu faydalı bulacaktır, keyfini çıkarın .
@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
Böylece, tüm ortam değişkenlerini itmek için çağırabilirsiniz: PushAllEnvironmentVariables, tüm ortam değişkenlerini geri yüklemek için şunu çağırabilirsiniz: PopAllEnvironmentVariables
PATH
- sadece örneğin veya herhangi bir nedenle. Ben özellikle yol değişken itme / pop ile ilgileniyorum. Yedeklemeye / geri yüklemeye karşı konuşan bir şey var mıPATH
?