Batch programming
لغة البرمجة Batch  في نظام ويندوز
ما هو برنامج Batch:
هو
ملف نصي يحتوي على مجموعة من الأسطر التي تحتوي على أوامر تنفذه بالتتابع
من السطر الأول إلى نهاية الملف, ويكون الملف النصي بالامتداد
.bat”” , ويفرر نظام ويندوز XP و Vista مجموعة من الأوامر التي تسمح لغة Batch بأن تتعامل مع جميع مكونات النظام بما فيها الملفات و الشبكات و أيضا حسابات المستخدمين, يتعامل البرنامج “cmd.exe” مع ملفات الباتش, لمعرفة استخدام هذا البرنامج أقرأ الموضوع التالي.

 

كيفية أنشاء ملف batch  بسيط:

·         يجب استخدام برنامج المفكرة لكتابة برامج batch وتستطيع تشغيل المفكرة باستخدام :
1.       أضغط  (أبدأ  ثم تشغيل ثم أكتب notepad)
2.       أختر كالتالي:القائمة أبدأ>البرامج>البرامج الملحقة>المفكرة
·         قم بكتابة الأمر التالي
pause
·         ثم قم بحفظ الملف بأسم “test.bat” ثم أختر حفظ كنوع لكي يكون “All Files” ثم أضغط حفظ.:
·         يظهر لك ملف كما في الصورة:
·         قم بالضغط على الملف سيظهر لك كما في الصورة:
·         يقوم الأمر “pause” بانتظار ضغط حرف على لوحة المفاتيح
·         لكي تقوم بتعديل على الملف اضغط بزر الماوس اليمين و أختر تحرير
 

الأوامر الخاصة باللغة batch:

        i.            الأمر “echo
يقوم الأمر بطباعة جملة من اختيار المبرمج كما في المثال التالي:
echo Wellcome to windows
قد تكون لاحظت في المثال “test.bat” أن البرنامج يقوم بطباعة الأمر ثم بطباعة نتيجة الأمر و تستطيع إيقاف هذه الخاصية باستخدام:
@echo off
و لإعادة تشغيل هذه الخاصية فقط غير الأمر إلى (@echo on).
      ii.            الأمر rem
يستخدم هذا الأمر لكتابة التعليقات في البرنامج مع العلم أنه لن يؤثر على سير البرنامج و تستطيع أستبدلها بـ”::” :
rem owner:abgoor.blogspot.com
:: name:Test.bat Date:10/12/2010
    iii.            الأمر pause
قمنا باستخدام سابقا , و كما شرحنا سابقا فأنه يوقف تنفيذ السكريبت و يعرض الرسالة , بانتظار ضغط زر في لوحة المفاتيح:
  Press any key to continue
   iv.            الأمر “set
يستخدم هذا الأمر لتعريف المتغيرات كما في المثال التالي:
@echo off
set name=”abgoor”
echo %name%
pause
قم بحفظ المثال بأسم “name.bat”, يقوم المثال بطباعة الاسم “abgoor” ,ستلاحظ أننا قمنا بوضع أسم المتغير بين الحرف “%” لدلالة على أن متغير, في هذا المثال قمنا بتحديد المتغير ولكننا نستطيع طلب إدخال الاسم من المستخدم باستخدام :
set /p name=“what is your name:”
لقد قمنا بإضافة المعامل “/p” ثم أسم المتغير “name” ثم بعد علامة يساوي النص الذي يظهر للمستخدم للمطالبة بإدخال البيانات (قم بتعديل الملف name.bat  ليطالب المستخدم بطباعة أسمه).
يقوم نظام ويندوز بتعريف متغيرات تحتوي على معلومات النظام و المستخدمين تستطيع إظهارها أستخدم الأمر “set” من أي معلمات , كما يوجد متغيرات خاصة كما في الجدول التالي:
المتغير
الشرح
%CD%
تقوم بعرض الدليل الحالي
%DATE%
يحتوي على قيمة التاريخ الحالي (Wed 10/06/2010)
%TIME%
يحتوي على قيمة الوقت الحالي (19:08:39.68(
%RANDOM%
يحتوي على رقم عشوائي تتغير قيمة كل ثانية , و تقع قيمته بين (0- 32767)
%ERRORLEVEL%
يحفظ هذا المتغير قيمة رقمية تدل على نوع الخطأ في حالة حدوثه في الأمر السابق , وفي نجاح الأمر السابق تكون قيمته 0
كما تستطيع استخدام الأمر “set” للقيام بالعمليات الحسابية باستخدام التعليمة “/a” كما في المثال التالي (العملية % ترجع الرقم واحد في حال وجود باقي للقسمة و الرقم 0 في عدم وجود باقي):
set /a 12 + 32
set /a 13 – 2
set /a 23 % 2
set /a 244 / 2
سيطبع البرنامج الناتج مباشرة و تستطيع إسناد القيمة لمتغير أو القيام بعملية حسابية باستخدام متغير كالمثال التالي:
set /a value=23 * 2
set /a value2= %value% + 21
echo %value%
echo %value2%
في السطر الأول يقوم المترجم بإسناد قيمة العملية الضرب 23 * 2 إلى المتغير value , و في السطر الثاني يقوم المترجم باستخدام القيمة value في عملية الجمع بالرقم 21 و إسنادها إلى المتغير value2
كما تستطيع تطبق الأمر ليؤثر على قيمة متغير بالزيادة أو النقصان كما في المثال التالي:
set value1=12
set value2=12
set /a value1=%value1% – 1
set /a value2=%value2% + 1
echo %value1%
echo %value2%
ستنقص قيمة المتغير value1 بمقدار واحد وتزيد قيمة المتغير value2 بمقدار واحد.
       v.            الأمر shift
تستطيع في لغة Batch استخدام معاملات في حالة تطبيقه من مترجم الأوامر “cmd.exe” كما في المثال التالي:
arg.bat mohmmad 21 uae
الآن أنظر إلى النص البرمجي للبرنامج “arg.bat”:
echo off@
rem %0 :always  be the script name
echo %0
echo %1
echo %2
*ملاحظة(المتغير %0 يدل دائما على أسم البرنامج)
لاحظ أنك تستطيع زيادة القيمة الرقمية بعد الإشارة “%” على حسب المعاملات المراد تلقيها .
و الآن إلى الأمر shift الذي يستخدم لتغير موقع المعامل كما في المثال التالي:
echo off@
shift /2
echo %1
echo %2
تلاحظ أن الأمر shift يتبع بالقيمة الرقمية “/2” , سيقوم الأن هذا الأمر بحذف قيمة المعامل “%2” ونقل قيمة المعامل “%3” بدون تغير قيمة المعامل “%1” , في حالة القيام بتنفيذ الأمر على المعامل الأخير سوف تحذف قيمته دون تغير في المعاملات الأخرى.
     vi.            الأمر goto
يستخدم هذا الأمر للانتقال إلى مجموعة من الأوامر تعرف بأسم  “label” و تستطيع أنشاء هذه المجموعة البرمجية باستخدام الحرف “:”  ثم الاسم الذي سنعتمد عليه في البرنامج كما في التالي:
@echo off
goto Hello
echo “This text will not show”
:Hello
echo “Hello”
قم بحفظ الملف وتنفيذه ستلاحظ أن البرنامج سيتجاهل الجملة البرمجية:
echo “This text will not show”
ملاحظة: في حالة استخدامك لأكثر من “label” من المفضل وضعها في نهاية الملف البرمجي.
   vii.            الأمر call:
يستخدم هذا الأمر لتنفيذ و استدعاء Batch file” موجود لدينا كما في المثال:
call c:\test.bat
  viii.            الأمر “if:
يستخدم الأمر “if” لتحكم بسير البرنامج و توفر لغة “batch” صيغ متعددة لجملة القرار “if” و لكن الصيغ الأساسية هي كالتالي:
if(الشرط) (الأمر في حالة المطابقة)
if not (الشرط) (الأمر في حالة عدم مطابقة الشرط)
و الآن سنتطرق إلى كل صيغة مع الأمثلة :
·         الأمر “if exist”
تستخدم هذه الصيغة شرط المقارنة وجود ملف من عدمه كما في المثال التالي:
if exist c:\test.txt echo “file found!”
if not exist c:\test.txt echo “file not found!”
تقوم الجملة البرمجية الأولى بالبحث عن الملف “c:\test.txt” في حالة و جوده يطبع الجملة “file found!”, و تقوم الجملة الثانية بالعكس بسبب وجود الكلمة not بعد الأمر if ففي حالة عدم وجود الملف “c:\test.txt”  سيطبع الجملة “file not found!”.
·         الأمر “if defined”
يقوم بالبحث عن المتغير أذا كان معرفا أم لا كالمثال التالي:
@echo off
set /p name=”name:”
if not defined %name% echo “No value enter!”
if defined %name% echo welcome %name%
قم بحفظ الملف وتنفيذه , و حاول أن تضغط زر الإدخال “enter” بدون كتابة أي أسم , ومن ثم نفذه مع كتابة الاسم,
في حالة عدم كتابة الاسم يعتبر “not defined” غير معرف لذا ستطبق الجملة البرمجية الثالثة و في حالة كتابة الاسم ستطبق الجملة البرمجية الرابعة.
·         علميات المقارنة في الأمر if
تستطيع استخدام عملية المقارنة في التعليمة if  كما في المثال التالي:
set site=”abgoor.blogspot.com”
if %site% == “abgoor.blogspot.com “ echo welcome to %site%
if not %site% == “abgoor.blogspot.com” echo wrong value!
تستخدم “==” في عملية المقارنة بين المتغير site”  و السلسة النصية “abgoor.blogspot.com
, و للمقارنات الحسابية “أكبر من , أصغر من , أصغر من أو يساوي,..الخ”
تستبدل التعليمة “==” بتعليمة من الجدول كما في التالي بعد كتابة الأمر
If  مع التعليمة “/i” كالتالي (if /i value LSS value2):
العملية
المعنى
EQU
مساوي لي
NEQ
غير مساوي لي
LSS
أصغر من
LEQ
أصغر من أو يساوي
GTR
أكبر من
GEQ
أكبر من أو يساوي
·         استخدام التعليمة  IF  مع التعليمة goto :
تستطيع استخدام التعليمة  IF مع التعليمة goto  في حالة أردت تنفيذ أكثر من أمر في حالة مطابقة الشرط كما في المثال التالي:
if exist c:\autorun.inf goto message
echo “autorun.inf not found in C dirve”
exit
:message
echo “autorun.inf file found in C: drive”
atrrib –r –h –a c:\autorun.inf
rename c:\autorun.inf c:\autorun.txt
echo “autorun.inf disable!!”
exit
هذا البرنامج يبحث عن الملف “autorun.inf” ويقوم بأبطال عمله بإعادة تسمية “autorun.txt” .
     ix.            الأمر “For
يحتوي الأمر “For” كما في الأمر “If” على أكثر من صيغة و لكن الصيغة الأساسية :
for %X in (group of values) do command
%X:المتغير الذي سنتعامل معه و الذي تتغير قيمة تبعا للمجموعة المتغيرات المحددة , لاحظ أنه في الإصدارات الأقدم يجب وضع علامتين “%%” قبل المتغير (أسم المتغير حساس لحالة الأحرف )
in: الأمر البرمجي يدل على مجموعة المتغيرات
(group of values): نضع القيم التي يدل عليها المتغير %X
do: يعقب هذه الكلمة الأمر البرمجي المراد تطبيقه على مجموعة المتغيرات
·         for %X in (file1 file2 file3) do command
تقوم هذه الصيغة لأمر “for” بتطبيق الأمر على مجموعة الملفات المعرفة كما في المثال التالي:
rem This program will print the text for the files.
for %X in (test.bat arg.bat test1.bat) do sort %X
هذا المثال سيطبع محتويات الملفات (test.bat arg.bat test1.bat) على الشاشة , تستطيع أيضا استخدام التعليمة “* لتنفيذ الأمر على نوع معين من الملفات كما في المثال التالي:
for %A in (*.txt *.bat *.info) do echo %A
سيطبع الأمر أسماء الملفات التي تحمل الامتداد (info,bat,txt).
·         for /L %X in(start,step,end) do command
هذه الصيغة تتعامل من السلاسل الرقمية , قبل أستخدمها يجب التأكد من وجود المعامل “/L” بعد الأمر for , نأتي ألى شرح القيمة التي تقع بين القوسين (start,step,end):
start: قيمة البداية للسلسة الرقمية.
step: هو المعامل الذي يضاف ألى قيمة البداية ألى أن تسوي القيمة  النهائية.
end:قيمة النهاية للسلسة الرقمية.
ستفهم الفكرة أذا طبقت المثال التالي:
@echo off
for /L %x in (1,1,10) do (echo %x)
سيطبع المثال الأرقام من القيمة 1 و يزيد قيمة البداية بمقدار 1 إلى الوصول إلى قيمة النهاية 10.
·         if /d %x in (C:\) do command
هذه الصيغة تمكن المستخدم من تنفيذ الأوامر على المجلدات بدل الملفات:
for /d %x in (C:\*) do echo %x
سيقوم الأمر بطباعة أسماء المجلدات في المجلد “C:\” فقط من دون الملفات .
·         if /r %x in (C:\) do command
تقوم هذه التعليمة بتنفيذ الأمر على جميع الملفات الموجودة في جميع المجلدات الفرعية في الملف المطبق الأمر فيه , في حالة وجود التعليمة “/d” مع التعليمة  “/r”  سيتم تطبيق الأمر على المجلدات المتفرعة من المجلد المنفذ فيه الأمر بدل الملفات  , و الأن مع مثال بسيط:
for /r %X in (C:\WINDOWS\system32\*) do echo %X
سيطبع الأمر جميع الملفات الموجودة في الملف “system32” مع الملفات الموجودة في الملفات الفرعية.
       x.            الأمر “exit
يقوم هذا الأمر بالخروج من البرنامج  , ولا يوجد لهذا الأمر أي معاملات.
     xi.            الأمر “cls
يقوم الأمر بمسح المعطيات من على شاشة مترجم الأوامر , و بدأ صفحة جديدة.
   xii.            الأمر start
يستخدم هذا الأمر لبدأ برنامج رسومي من محث الأوامر كما في المثال التالي:
start notepad
سيشغل الأمر برنامج المفكرة.

الخاتمة

شرح الأداة Netstat في نظام ويندوز
استخراج ملفات الصوت والصور من ملفات الفلاش (SWF) في نظام لينكس