الخميس، 7 أكتوبر 2010

لغة البرمجة Batch في نظام ويندوز

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
سيشغل الأمر برنامج المفكرة.

الخاتمة


هناك 6 تعليقات:

  1. شكرا على المعلومات المفيدة
    مكن اريد ان اعرف امر ( ادهب )
    متال : ادهب ل google.com

    ردحذف
    الردود
    1. تستطيع أستخدام متصفح explorer بواسطة هذا الأمر :

      start iexplore abgoor.blogspot.com

      فقط غير الصفحة في نهاية الأمر

      حذف
  2. بارك الله بيك حبيبي الغالي على الشرح الاكثر من رائع لكن هل تعلم انك انقذتني

    الف شكر لك يا بطل

    ردحذف
  3. شكرا ع ألشرح أخي ♡`~

    ردحذف
  4. بارك الله بك اخي على الشرح ... ممكن رابط حسابك على الفيس بوك محتااااج مساااعدة منك اخي ضروري

    ردحذف
  5. السلام عليكم هل ممكن عمل اختصار لامر cmd على صطح المكتب
    معناه مش كل مرة افتح cmd واكتب الامر انا عايز الاختصار لما اضغط عليه ينفد المر الي كونة اكتب من قبلعلى cmd
    وشكر

    ردحذف