1-مقدمة تاريخية :
9- التعامل مع المنافذ :
working with batch programs
العمل على برامج الحزم
أذا كنت تكرر كتابة عدة أوامر فيمكنك أن تنشىء ملف يقوم بالنيابة عنك بكتابة تلك البرامج ويسمى هذا النوع بالباتش ويكون بالامتداد .bat
understand batch files
فهم ملفات الباتش:
أن ملف الباتش عبارة عن ملف نصى يحتوى على واحد أو أكثر من ملفات الدوس
مثال:أنشائ ملف باتش يقوم بنقل القرص المرن الى المجلد mam الموجود على c
del a:\ma\*.*
rd a:\ma
لقد قمنا بانشاء ملف bat وسميناه movi وكتبنا ماسبق فيه
*حفظنا الملف بالمتداد bat
*كتبنا الملف باستخدام الedit او المفكرة (notepad)
*الدوس ليس به أمر نقل (move) لذا فنحن نسخنا الملف ثم حذفناه ولاحظ أ مر النسخ وأمر الحذف؟
وهناك ستة أوامر فقط فى الدوس خاصة بالباتش وهى
call:
يقوم بتنفيذ ملف باتش آخر ثم يعود لنفس الملف ليقوم بتنفيذ الباقى وبدون هذا الامر اذا فرعنا على ملف باتش آخر فبعد الانتهاء من تنفيذه لن يعود الينا
echo: (on, off)
يعرض او لا يعرض رسائل على الشاشة :مثل عرض الاوامر أثناء تنفيذها
الامر echo off لايعرض صيغة الامر أثناء تنفيذه أما الامر echo فيعرض تعليق يظهر على الشاشة وأما الامر
echo on فيستانف عرض صيغة الامر وأذا أردنا عرض السطور عدا سطر بعينه نكتب قبله echo off@
for:
يقوم بتنفيذ الاوامر لمجموعة من الملفات أو المجلدات
goto:
يحول الىأمر فىجزء آخر من نفس الملف لتنفيذه هو وما بعد تلك النقطة
if :
ينفذ أمر مبنى على نتيجة مشروطة
pause:
لايقاف البرنامج مؤقتا حتى تنقر على أى مفتاح
rem:
تعليق على جزء من البرنامج ليوضح ماعمله ونحو ذلك للتذكر ولايظهر عند التنفيذ
shift:
يغير مكان (change the position of replaceable)
أستطراد:
يجب عليك عند تسمية ملف الباتش الخاص بك ان لا تستخدم أسم ملف محجوز للدوس
فعلى سبيل المثال لنفرض انك سميت ملفك format فان هذا الملف لن ينفذ ....! لماذا؟
الاجابة أن الدوس عند عمله ينفذ الاوامر بالاولوية فهو ينفذ أولا أوامر .com وأوامر .exe
فاذا وجد ملف له نفس اسم ملف الامتدادين السابقينو له الامتداد bat فلن ينفذه.
*حسنا كتبنا البرنامج ونريد أن ننفذه ماذا نفعل؟
ببساطة أكتب أسم الملف بدون أمتداد وهو المتبع مع كل الملفات التنفيذية مثل .com exe ثم اضغط enter
وأفتراضيا يعرض ms-dos كل أمر فى ملف الباتش كأمر واجب تنفيذه
وبعد أنتهاء تنفيذ برنامج الباتش فان الدوس ربما يعرض محثين فى نهاية التنفيذ ! وذلك لان الدوس يعامل نهاية السطر كسطر جديد
** ولايقلف تنفيذ أوامر الباتش أضغط ctrl + c or ctrl +break
*** أختبار ملفات الباتش: من المفضل عند كتابة ملف باتش طويل أن تجزئه لعدة ملفات حتى يسهل أكتشاف الخطاء عند تنفيذه
وفى حالة فشل تنفيذ الامر فان برنامج الباتش لن يتوقف بل سينفذ الامر الذى يليه وستظهر رسالة خطء فان لم تظهر فان ذلك دليل على وجود أمر echo off فاذا اردت ان تظهر رسالة فى حالة حدوث الخطاء أحذف echo off
**** يمكن انشاء ملف باتش صغير عن طريق الامر copy conوقد سبق شرحه
مثال:
echo off
echo ******* if you will now copy files then*******
pause
copy l:\1\*.* k:\m
echo on
echo ********now I will delete that file if yes then
******
pause
del l:\1\*.*
rd l:\1
الشرح :لدينا مجلدين على الL ,k
ونريد أن ننقل الملف من الL الى K ونحذف المجلد
السطر الاول: echo off يخبرنا أن كل سطور الوامر لن تظهر أثناء التنفيذ
السطر الثانى: سيظهر هذا التعليقومكمل هذا التعليق سيضيفه الامر pause وهو (press any key to continue)
السطر الثالث: سيوقف تنفيذ الامر حتى تضغط على أى مفتاح
السطر الرابع: لن يظهر ولكن سينفذ عملية النسخ
السطر الخامس: سيظهر الاوامر المكتوبة أثناء تنفيذها.
...................الخ
مثال 2:
echo off
rem ***** its only example to traning on batch programs in dos*****
echo ******* if you will now copy files then*******
pause
copy l:\1\*.* k:\m
echo ********now I will delete that file if yes then
******
pause
del l:\1\*.*
rd l:\1
سيتم عرض الناتج ولكن الملاحظة للامر rem لن تظهر حيث أنها ملاحظة للمبرمج
***** لنفترض الآن أن لدينا البرنامج السابق وليكن أسمه 1.bat ونريد أن نجعله يعمل من خلال برنامج باتش آخر وليكن أسمه 2.bat
المثال:
لننشئ ملف 2.bat
echo off
call movi
pause
md l:\1
فى هذا البرنامج سيتم تنفيذ الجزء الاول ثم ينتقل الى الملف الثانى لينفذ مابه من أوامر ثم يرجع للملف الاول ليكمل باقى مابه من أوامر
*أذا لم يتضمن البرنامج الامر call فان البرنامج سينفذ الجزء الاول من البرنامج ثم ينتقل للبرنامج الثانى لينفذ مابه من أوامر دون أن يرجع
للبرنامج الرئيسى.
-----------------------------------------------------------------------------------------------------------------
هام جدا very important
من أهم الاوامر فى ملفات الباتش
1-REPLACEABLE PARAMETERS:(1% 9%)
2-CONTROLLING PROGRAM FLOW:(IF GOTO)
اولا :احلال الوسائط :(REPLACEABLE PARAMETERS:(1% 9%
يمكن أحلال وسائط من 1% الى 9% وعلى سبيل المثال :لنفترض أن لدينا الملف MAK.BAT
يحتوى على الامر
COPY 1% 2%
فعند المحث يمكن كتابة الامر
MAK C:\COMM\*.* A:
فى هذه الحالة سيحل الوسيط 1% محل C:\COMM\*.* والوسيط 2% محل A:
ويمكن التعويض بالوسائط من 1% وحتى 9% فلذا أردنا أكثر أستخدمنا الامر SHIFT وسنتعرف عليه لاحقا.
ثانيا :التحكم فى سريلن البرنامج :CONTROLLING PROGRAM FLOW
لكى نزيد من مرونة ملفات الباتش يمكننا أستخدام الامر المشروط IF لتنفيذ أوامر مختلفة تحت ظروف مختلفة .
والامر GOTO للانتقال الى اىجزء من البرنامج
وباستخدام أحلال الوسائط مع الامرين السابقين يمكن أداء مهام معقدة
الامر IF:
اذا أذا أردت ان تنفذ امر(اوامر)تحت شرط(شروط) معين فاستخدم الامر IF فعلى سبيل المثالننشئ ملف باتش يسمى M2 وبه الامر التالى و الذى يبدا برنامج EDIT
IF "1%" == "W" C:\
فى هذا المثال سيقوم الوسيط بمقارنة المدخل فاذا كان مطابق للحرف W سيفتح البرنامج وغير ذلك سيتجاهل هذا الامر
ولتنفيذ الامر نكتب امام المحث
M2 W
*العلامة == معناه أن الوسيط يجب أن يساوى القيمة
**يجب أن يكتب البرنامج التنفيذى فى سطر لوحده
*** يجب أن تكون ملفات الباتش فى مجلد واحد وهو الذى نعمل عليه أو أن نكتب المسار كاملا
الامرGOTO:
وهو للتوجيه الى أجزاء مختلفة من سطور الاوامر فى نفس البرنامج
مثال:
echo off
rem goto example
goto skipdown
echo both of these echo commands
echo will be skipped
:skipdown
cls
فى هذا المثال أنتقلنا الى السطر skipdown ولكى يتعرف عليه الامر goto يجب ان نضع نقتطين : قبل الكلمة المرادة.
-----------------
اليك هذا المثال الذى يجعل الشاشة تجرى امامك
echo off
:m
echo ******* WELCOME TO MAHMOUD COMPUTER WORLD *******
echo ******** WELCOME TO MAHMOUD DOS WORLD *******
goto m
----------------
دمج if وgoto:
e.g.
echo off
if"1%" =="a" goto chess
rem
rem***************************************************
rem if the user doesnot type a , run checker.
rem
cd\games\check
checker
rem skip over chess by jumping to the line labeled :end.
goto end
rem
rem***************************************************
rem if ms-dos jumps to this label, the user wants chess.
rem
:chess
cd\games\chess
cmate
rem the following line marks the end of the batch program.
:end
-----------------------------------------------------------------------------------------------------------------
أنشاء قوائم نظام:
لنفترض انك تريد أن تنشىء قائمة تحتوى على مجموعة أوامر وملفات تفتحها دائما ولاتريد أن تكتب كل مرة الامر
لنفرض انك تفتح برنامج المحرر (edit) كثيرا وبرنامج (scandisk) والمسجل (register) وظبط الوقت (time) والتاريخ (date)
أو تذهب الى الويندوز بعد أن تنتهى بأعمالك على الدوس
لذا فمن المفضل أنشاء قائمة بمجرد الضغط على زر يقوم هو بما نريد.
والقائمة السابقة تكون على الشكل
1-open edit
2-run scandisk
3-open register
4-adjust time
5-adjust date
6-goto windows
والان كيف ننشى هذا الملف الذى بمجرد أن نضغط على 1 يعمل المحرر و2 يعمل الفحص و3 يفتح المسجل .............ألخ
سنقوم بانشاء 7 ملفات باتش
الاول وهو الملف الرئيسى الذى سيقوم بعرض الجدول ثم
واحد لفتح المحرر-الثانى لفتح الفاحص-الثالث-للمسجل..............ألخ
أنشاء الملف الرئيسى
echo off
cls
echo.
echo **** THIS IS A LEARNING PROGRAM ****
echo.
echo.
echo 1-open edit
echo.
echo 2-run scandisk
echo.
echo 3-open register
echo.
echo 4-adjust date
echo.
echo 5-adjust time
echo.
echo 6-goto windows
echo.
echo.
ثم نسمى هذا الملف باى اسم نريده بالمتداد bat وليكن m.bat
الملف الاول الذى يفتح المحرر.
echo off
cls
c:\
edit
m
ثم نحفظهبالاسم 1.bat ولاحظ انناوضعنا cls لمسح الشاشة و نهينا السطر بالحرف m وهذا يعنى أنه عند الخروج من البرنامج يقوم بعرض الملف m.bat
لتظهر لنا لوحة الاختيارات مرة أخرى.
الملف الثانى : تشغيل برنامج الفحص
echo off
cls
c:\
scandisk
m
ويحفظ الملف 2.bat
الملف الثالث : فتح المسجل
echo off
cls
c:\
regedit
m
ويحفظ 3.bat
الملف الرابع:ضبط الوقت
echo off
cls
c:\
time
m
ويحفظ بالاسم 4.bat
الملف الخامس : ضبط التاريخ
echo off
cls
date
m
ويحفظ بالاسم 5.bat
الملف السادس : الخروج الى الويندوز
echo off
cls
ويحفظ بالاسم 6.bat
حسنا أما تضع هذه الملفات على الدليل الام أوداخل مجلد معا
-------------------------- ----------------------------------- --------------------------
اليست الطريقة السابقة مملة ! نعم سهلة لكنها بالنسبة لك مملة بصفتك خبير فى الدوس !!
فهل هناك طريقة أخرى؟
الاجابة نعم باستخدام الامر if وgoto والوسائط
الطريقة الثانية :