Thursday, January 12, 2017

Bat files အေၾကာင္းကုိ သိခ်င္ ေလ႕လာခ်င္တဲ႕ သူငယ္ခ်င္းမ်ားအတြက္ ကုိယ္တုိင္းေရးမဟုတ္ေပမဲ႕ ကၽြန္ေတာ္ကုိယ္တုိင္ မသိခင္က စေလ႕လာမိခဲ႕တဲ႕ ဆုိဒ္မွ မွတ္စုအေနနဲ႕ ကူးထားခဲ႕တာေလးပါ။ အဲ႕ဒီဆုိဒ္ကုိ
ညြန္းခ်င္ေပမဲ႕လည္ လက္ရွိ ဆုိဒ္လိပ္စာကလည္ မေတြ႕ေတာ႕တာေၾကာင္႔ စာေရးသားသူအေနနဲ႕ နားလည္ေပးမယ္လုိ႕ ယုံၾကည္ပါတယ္။ ဒီသင္ခန္းစာကုိ ကၽြန္ေတာ္ ကုိယ္တုိင္း ေရးသားထားတာ မဟုတ္တာကုိေတာ႕ ရုိးသားစြာ ၀န္ခံပါတယ္။ ဒါေၾကာင္႔ မသိမနားလည္ရင္ေတာ႕ ေမးျမန္းႏုိင္ပါတယ္။ အကၽြမ္းက်င္ဆုံး အဆင္႔ မဟုတ္ေပမဲ႕ တက္ႏုိင္သမွ် ရွင္းျပေပးပါမည္။ မႈရင္း အေရးအသား အတုိင္း မျပင္ မျဖည္႔စြတ္ဘဲ တင္ျပလုိက္ပါတယ္။


သင္ခန္းစာေလး ဆက္လက္ေဆြးေႏြးၾကရေအာင္
က်ေနာ္ ဒီတစ္ေခါက္ ေၿပာၿပေပးမွာကေတာ့ For Loop အေၾကာင္းေဆြးေႏြးေပးမွာၿဖစ္ပါတယ္။ အဆင့္ နည္းနည္း ၿမင့္လာၿပီၿဖစ္လို႔ ေသခ်ာေလး လိုက္လုပ္ၾကည့္ေစခ်င္တယ္။ ၁ေခါက္နဲ႔ နားမလည္ရင္ အနည္းဆုံး ၂ ေခါက္ေလာက္ဖတ္ေပးပါ။ က်ေနာ္ေရးထားတာ နားမလည္ရင္ေတာ့ က်ေနာ့္ကို ၿပန္ေမးပါ။ ေၿဖေပးပါ့မယ္။ ဒါဆုိ က်ေနာ္တုိ႔ For Loop အေၾကာင္းေလး စလုိက္ရေအာင္

သူ႔ကို ေရးမယ္ဆုိရင္ ေရးပံုေရးနည္းကေတာ့
FOR %%PARAMETER IN(set) DO command
For Loop ရဲ႕ Syntax ကိုေတြ႔လို႔ စိတ္မညစ္သြားပါနဲ႔။ က်ေနာ္ အတတ္နုိင္ဆုံး နားလည္လြယ္ေအာင္ေရးေပးပါ့မယ္။
က်ေနာ့္ တုန္းက ဆုိရင္ ဒီ Looping အပိုင္းလည္း ေရာက္ေရာ သင္ေပးမယ့္သူလည္း မရိွ ၊ Google မွာရွာေတာ့ လည္း အၿပည့္အစံုမရနဲ႔ ေတာ္ေတာ္ ဒုကၡေရာက္ခဲ့ရတာ။ အခုေတာ့ က်ေနာ္လည္း နားလည္သင့္သေလာက္ နားလည္ ခဲ့ၿပီးၿပီမို႔ မွတ္မိသေလာက္ ၿပန္လည္မွ်ေ၀တာပါ။
အစ္ကို တုိ႔ ဒီအပိုင္းမွာ ဖတ္ရတာ နားမလည္ေတာ့ လုိ႔ စိတ္ညစ္ၿပီးေတာ့ Bat ကို မေလ့လာေတာ့တာ မ်ိဳးေတာ့ မလုပ္ပါနဲ႔ လို႔ ေတာင္းဆုိခ်င္ပါတယ္။ က်ေနာ့္တုန္းကလည္း အဲလို စိတ္မ်ိဳးၿဖစ္ဖူးလို႔ပါ။ နားမလည္ရင္ က်ေနာ့္ကို ေမးပါ။ က်ေနာ္မသိရင္လည္း က်ေနာ့္ထက္ေတာ္တဲ့ တတ္တဲ့သူေတြကို ၿပန္ေမးေပးပါ့မယ္။
အတတ္နုိင္ဆုံး နားလည္ေအာင္ေရးေပးမွာ ၿဖစ္လို႔ ေသခ်ာလိုက္လုပ္ေပးပါ။
ကဲဒါဆုိရင္ က်ေနာ့္ ေရးနည္း ထုံးစံအတုိင္း ေအာက္က ဥပမာေလးနဲ႔ စလုိက္ရေအာင္
@echo off
cls
for %%A in (abc,def,xyz) do echo %%A
အဲဒါေလးရဲ႕ Code ေတြကို ရွင္းၿပပါ့မယ္။ cls ကေတာ့ သိၿပီးသားၿဖစ္မွာပါ။
For Loop ထဲမွာ Variable တစ္ခုၿဖစ္တဲ့ %%A ကို ေၾကၿငာပါတယ္။ ၿပီးေတာ့ သူ႔ထဲကို မတူညီတဲ့ Value ေတြကို (abc,def,xyz) ဆုိၿပီေတာ့ ကြင္းထဲမွာၾကိဳထည့္ထားပါတယ္။ အဲဒီ့ ကြင္းထဲကေကာင္ေတြကို ေတာ့ predefined set value လုိ႔ေခၚပါတယ္။ အဲဒါက Looping တစ္ခါပတ္တုိင္း တစ္ခါသတ္မွတ္ထားမွာပါ။
ေနာက္ဆုံးက echo %%A ဆုိတာနဲ႔ For Loop က Variable ရဲ႕ တန္ဖိုးကို အသစ္ေၿပာင္းထည့္ပါတယ္။
%%A ဆုိတာကေတာ့ Variable တစ္ခုၿဖစ္ၿပီး သူက Looping တစ္ခါပတ္တုိင္း မတူညီတဲ့ Values ေတြ ကို predefined set ထဲက တန္ဖုိးေတြနဲ႔ လက္ခံပါတယ္။
0 ကေန 9 ကလြဲရင္ %% ေနာက္မွာ ၾကိဳက္တဲ့ character တစ္လုံးစီကို သံုးႏိုင္ပါတယ္။
IN(abc,def,xyz) ဆုိတာကေတာ့ For Loop လုပ္ေဆာင္မယ့္ list တစ္မ်ိဳးၿဖစ္ပါတယ္။
က်ေနာ္တို႔ Program က Looping တစ္ခါပတ္တုိင္းမွာ Variable ၿဖစ္တဲ့ %%A ထဲကို () ကေန အမ်ိဳးမ်ိဳးေသာ တန္ဖိုးေတြထည့္သြင္းနုိင္ပါတယ္။
() ထဲက တန္ဖိုးေတြကို ေတာ့ comma,colon ေတြနဲ႔ space bar စတာေတြနဲ႔ ပိုင္းၿခားနုိင္ပါတယ္ဗ်ာ။
() ထဲက တန္ဖုိးမကုန္မခ်င္း For Loop ကအလုပ္လုပ္ေနေစပါတယ္။
DO ကေတာ့ Looping တစ္ခါပတ္ တုိင္း ဘာအလုပ္လုပ္ခ်င္တယ္ဆုိတာေၿပာတာပါ။
ခုနက က်ေနာ္တုိ႔ ေရးခဲ့တဲ့ Program မွာဆုိရင္ေတာ့ ECHO %%A နဲ႔ အေၿဖကို ရိုက္ထုတ္ထားပါတယ္။
ထုိသို႔ ရိုက္ထုတ္ထားခ်င္းအားၿဖင့္ Loop တစ္ခါပတ္တုိင္း abc ဆုိတဲ့ Variable A ထဲက တန္ဖိုးကို Looping အတြက္ Do သံုးၿပီး Echo နဲ႔ အေၿဖကို User ကို ၿပသေပးပါတယ္။
က်ေနာ္ စာနဲ႔ ေၿပာတာ နားမလည္ရင္ ခုနက Program ကို Run ၿပီးေတာ့ ၾကည့္လုိက္ပါ။ ေအာက္ကေပးထားတဲ့ အေၿဖအတုိင္းရပါလိမ့္မယ္။
abc
def
xyz
အဲလို တစ္ခုခ်င္းစီ Looping အတုိင္းထြက္လာမွာပါ။ Loop ၃ ခါပတ္ခဲ့ပါတယ္။ အေၿဖကို do နဲ႔ echo သံုးၿပီးေတာ့ ၃ခါရိုက္ထုတ္ပါတယ္။ abc က A ထဲမွာ ပထမအၾကိမ္ Loop အတြက္ရိွမွာ ၿဖစ္ၿပီးေတာ့ ၊ def က ဒုတိယ loop ၊ xyz ကေတာ့ တတိယ loop မွာ ၿဖစ္ပါတယ္။
ဒါဆုိရင္ေတာ့ ခုနက ေရးခဲ့တဲ့ Bat File ေလးကို နားလည္ၿပီးေတာ့ Forr Loop ကို လည္း အေၿခခံအေနနဲ႔ နည္းနည္းေလး နားလည္သြားမယ္ထင္ပါတယ္။
For Loop က Parameter ေတြနဲ႔ တြဲၿပီးသံုးတတ္ရင္သံုးတတ္သလို Powerful ၿဖစ္ပါတယ္။
for Loop ကို ေလ့လာဖို႔ ေနာက္ထပ္ဥပမာတစ္ခုေလာက္လုပ္ၾကည့္ရေအာင္။ နည္းနည္း ခက္ေတာ့ခက္မယ္ဗ်. ဘာလို႔လည္း ဆိုေတာ့ က်ေနာ္ အေပၚမွာ ေရးၿပဖို႔ က်န္ခဲ့တာေလးေတြရိွေနလို႔ပါ။ က်ေနာ္ Parameter ကို define လုပ္တာနဲ႔ Parameter ေတြက ဘယ္လုိ အလုပ္လုပ္တယ္ဆုိတာ မေၿပာခဲ့ရလုိ႔ပါ။ ေအာက္က ဟာေလးကို Notepad မွာ ေရးၾကည့္လိုက္ပါ။
@echo off
echo
echo I am going to delete the following files:
echo %1 %2
echo.
echo Press Ctrl+C to Abort process
pause
for %%a IN(%1 %2) do del %%a
echo Killed Files. Mission Accomplished.
ေရးၿပီးၿပီဆုိရင္ေတာ့ သူ႔ကို testfor.bat နဲ႔ Save လုိက္ပါ။ ၿပီးရင္ ဒီတုိင္းထားပါ။ Program ကို မ Run လုိက္ပါနဲ႔။
Start>>Run>>cmd>> ထဲေရာက္သြားရင္ ခုနက က်ေနာ္တုိ႔ ေရးခဲ့တဲ့ testfor.bat ရဲ႕ လမ္းေၾကာင္းကို ေၿပာင္းလိုက္ပါ။ Path ေၿပာင္းတာေတာ့ က်ေနာ္လည္း အေသးစိတ္မေၿပာၿပေတာ့ဘူးေနာ္။ cd Command နဲ႔ ေၿပာင္းတယ္ဆိုတာ အားလုံး သိၿပီသားၿဖစ္မွာပါ။
အဲဒီ့ လမ္းေၾကာင္းကို ေၿပာင္းၿပီးရင္ေတာ့ ခုနက save ခဲ့တဲ့ testfor.bat ကို ေခၚလိုက္ပါ ၿပီးရင္ ဖ်က္ခ်င္တဲ့ file name ကို အဲဒီ့ေနာက္မွာထပ္ေရးပါ။
စာနဲ႔ေရးတာ နားမလည္မွာဆုိးလို႔ က်ေနာ္ ဥပမာ ေရးၿပလိုက္ပါမယ္။
cmd ထဲေရာက္ေနၿပီး လမ္းေၾကာင္းလည္းေၿပာင္းၿပီးသားဆုိပါက
မိမိ path လမ္းေၾကာင္း>testfor.bat a.txt b.txt
အဲဒီ့မွာ a.txt နဲ႔ b.txt ဆုိတာက က်ေနာ္ဖ်က္ခ်င္တဲ့ ဖုိင္နာမည္ပါ။ အဲဒီ့ေနရာမွာ ၾကိဳက္တာထားလို႔ရပါတယ္။ *.txt , *.pdf အစရိွသၿဖင့္ေပါ့။ အဲလိုရုိက္ၿပီး enter ေခါက္လုိက္ရင္ေတာ့ အဲဒီ့ file Name ေတြပ်က္သြားမွာ ၿဖစ္ပါတယ္။ အေပၚကဥပမာေလးကေတာ့ For ကို Parameter ေတြနဲ႔ တြဲသံုးၿပီးေတာ့ ဘယ္ေလာက္ အသံုးတဲ့တယ္ဆိုတာကို သက္ေသၿပလုိက္တာပါ။
စာဖတ္သူတို႔ အဆင္ေၿပရင္ေၿပသလို ဥာဏ္ရိွရင္ ရိွသလို ခ်ဲ႕ထြင္ေရးနုိင္ၾကပါတယ္။ကဲဒါဆုိ က်ေနာ္ ခုနက ဥပမာ ရဲ႕ အလုပ္လုပ္ပံု လုပ္နည္းကို ရွင္းၿပၿပီးၿပီ ၿဖစ္လို႔ Code ေတြကို နည္းနည္း ၿပန္ရွင္းၿပပါမယ္။ မွတ္မိသြားေအာင္ေပါ့။
4 လိုင္းေၿမာက္က echo %1 %2 ဆုိတာကေတာ့ For ထဲမွာ ေၾကၿငာထားတဲ့ a ဆိုတဲ့ Variable ထဲမွာ၇ိွမယ့္ %1 နဲ႔ %2 ထဲက Variable ကို ရိုက္ထုတ္တာပါ။
ထုိသုိ႔ ၿပဳလုပ္ၿခင္းအားၿဖင့္ က်ေနာ္တုိ႔ဟာ ခုန Run ၾကည့္တုန္းလိုမ်ိဳး I am going to delete the following files: ဆိုတဲ့ စာသားေအာက္မွာ က်ေနာ္တုိ႔ ရိုက္ထည့္လိုက္တဲ့ a.txt နဲ႔ b.txt ကို ေဖာ္ၿပေပးတာပါ။ OK?
၅ လုိင္းေၿမာက္မွာေတာ့ ပံုမွန္ echo ေနာက္မွာ . ေလးကို ထည့္ထားတာပါ။ ထုိသို႔ထည့္ထားၿခင္းအားၿဖင့္ တစ္လိုင္းၿခားတဲ့ ကိစၥကို လုပ္ေဆာင္ေပးပါတယ္။ (အရင္က မေၿပာခဲ့ရလုိ႔ အခုမွ ၿဖည့္ေၿပာေပးတာပါ)
ဒါဆုိ for looping ကို ေရးထားတဲ့ ေနရာကို ရွင္းၿပေပးပါ့မယ္။
ဖတ္ရ ခက္မွာ စိုးလုိ႔ အေပၚကဥပမာထဲက For Loop အတြက္ Code ကို ၿပန္ေရးေပးလိုက္ပါတယ္။
for %%a IN(%1 %2) do del %%a
ဒါဆုိရင္ Program ေလးလဲ Run ၿပီးသားဆုိေတာ့ For Loop ထဲက လုပ္ငန္းေတြကုိနည္းနည္းေတာ့ သေဘာေပါက္ေနၿပီထင္ပါတယ္။
ပိုၿပီးေတာ့ နားလည္သြားေအာင္ က်ေနာ္ နည္းနည္း လွ်ာရွည္လိုက္ပါ့မယ္။
%%a ဆုိၿပီးေတာ့ a ဆုိတဲ့ Variable ေလးတစ္ခုေၾကၿငာပါတယ္။
အဲဒီ့ a ထဲကို IN(%1 %2) ဆုိၿပီးေတာ့ a ထဲကို 1 နဲ႔ 2 ကို ထည့္ထား သတ္မွတ္ထားပါတယ္။
ၿပီးေတာ့ do ဆုိၿပီး ခုနက a ထဲမွာ ေရာက္ေနမယ့္ တန္ဖုိး ၂ ခုကို del ဆုိတဲ့ command နဲ႔ ဖ်က္လုိက္ပါတယ္။
ဒီေလာက္ဆုိ နားလည္မယ္ထင္ပါတယ္။ For နဲ႔ ပါတ္သက္လို႔ က်ေနာ္ ရွင္းၿပနုိင္တာ ဒီေလာက္ပါဘဲ။ ပိုမိုေကာင္းမြန္တဲ့ Looping ေတြနဲ႔ ၿပီးၿပည့္စံုေသာ bat တစ္ခုကို ဖန္တီးၿပီး PC ကို အၿပည့္အ၀ အႏာၱရာယ္ အၾကီးအက်ယ္ေပးလို႔ရတဲ့ အတြက္ အမ်ားၾကီးမရွင္းၿပေတာ့ပါဘူး။

No comments:

Post a Comment