ملف دفعي
ملف الدُفعة هو ملف برمجي في أنظمة DOS و OS/2 و Microsoft Windows . يتكون من سلسلة من الأوامر التي يُنفذها مُفسِّر سطر الأوامر ، والمُخزَّنة في ملف نصي عادي . قد يحتوي ملف الدُفعة على أي أمر يقبله المُفسِّر بشكل تفاعلي، ويستخدم بنيات تُتيح التفرع الشرطي والتكرار داخل ملف الدُفعة، مثل `<div>` و `<div>` و `<div>` IFو FOR` GOTO<div> `. مصطلح "دُفعة" مُشتق من معالجة الدُفعات ، ويعني "التنفيذ غير التفاعلي"، مع العلم أن ملف الدُفعة قد لا يُعالج دفعة من بيانات متعددة.
على غرار لغة التحكم في المهام (JCL) ولغة التحكم في البيانات ( DCL ) وغيرها من الأنظمة على الحواسيب المركزية والحواسيب الصغيرة ، أُضيفت ملفات الدفعات لتسهيل العمل المطلوب لبعض المهام الروتينية، وذلك بالسماح للمستخدم بإعداد برنامج نصي لأتمتتها. عند تشغيل ملف الدفعات، يقرأ برنامج الصدفة (عادةً COMMAND.COM أو cmd.exe ) الملف وينفذ أوامره، عادةً سطرًا بسطر. [ 1 ] تحتوي أنظمة التشغيل الشبيهة بنظام يونكس ، مثل لينكس ، على نوع مشابه من الملفات، ولكنه أكثر مرونة، يُسمى برنامج نصي للصدفة . [ 2 ]
يُستخدم امتداد اسم الملف .bat في نظامي DOS وويندوز. كما أضاف نظاما ويندوز NT وOS/2 امتداد .cmd . قد تحتوي ملفات الدفعات في بيئات أخرى على امتدادات مختلفة، مثل .btm في أنظمة 4DOS و 4OS2 و 4NT .
لقد تغيرت طريقة التعامل مع ملفات الدفعات بشكل ملحوظ بين الإصدارات. بعض التفاصيل الواردة في هذه المقالة تنطبق على جميع ملفات الدفعات، بينما تنطبق تفاصيل أخرى على إصدارات محددة فقط.
المتغيرات
دوس
في نظام MS-DOS ، يُمكن تشغيل ملف دفعي من واجهة سطر الأوامر بكتابة اسمه، متبوعًا بأي معلمات مطلوبة، ثم الضغط على ↵ Enterمفتاح الإدخال. عند تحميل نظام DOS، يتم تنفيذ الملف AUTOEXEC.BAT تلقائيًا، إن وُجد، لذا يُمكن وضع أي أوامر لازمة لإعداد بيئة DOS في هذا الملف. يستخدم مُستخدمو الحاسوب ملف AUTOEXEC.BAT لضبط تاريخ ووقت النظام، وتهيئة بيئة DOS، وتحميل أي برامج مُثبتة أو برامج تشغيل أجهزة، أو تهيئة اتصالات الشبكة وتعييناتها.
يشير امتداد اسم الملف .bat إلى ملف يحتوي على أوامر يتم تنفيذها بواسطة مترجم الأوامر COMMAND.COM سطرًا بسطر، كما لو كانت قائمة أوامر تم إدخالها يدويًا، مع بعض الأوامر الإضافية الخاصة بملف الدفعات لوظائف البرمجة الأساسية، بما في ذلك GOTOأمر لتغيير تدفق تنفيذ السطر.
نظام التشغيل ويندوز المبكر
طُرح نظام التشغيل مايكروسوفت ويندوز عام ١٩٨٥ كواجهة مستخدم رسومية (GUI) تُضاف إلى أنظمة التشغيل النصية ، وصُمم للعمل على نظام DOS. ولتشغيله، WINكان يُستخدم الأمر AUTOEXEC.BAT، الذي يُمكن إضافته إلى نهاية الملف AUTOEXEC.BAT للسماح بتحميل ويندوز تلقائيًا. في الإصدارات السابقة، كان بالإمكان تشغيل ملفات .bat من ويندوز عبر موجه أوامر MS-DOS. أما ويندوز ٣.١x والإصدارات الأقدم، بالإضافة إلى ويندوز ٩x، فكانت تستخدم الأمر COMMAND.COM لتشغيل ملفات الدفعات.
نظام التشغيل OS/2
كان نظام التشغيل IBM OS /2 يدعم ملفات الدفعات بنمط DOS. كما تضمن نسخة من REXX ، وهي لغة برمجة نصية أكثر تطورًا لملفات الدفعات . بدأت شركتا IBM ومايكروسوفت بتطوير هذا النظام، لكنهما انفصلتا أثناء بنائه إثر خلاف؛ ونتيجة لذلك، أشارت IBM إلى واجهة سطر الأوامر الخاصة بها، الشبيهة بنظام DOS، دون ذكر مايكروسوفت، وأطلقت عليها اسم DOS فقط، مع أن هذا لم يُحدث فرقًا يُذكر في طريقة عمل ملفات الدفعات من خلال COMMAND.COM.
يدعم مُفسِّر ملفات الدفعات في نظام التشغيل OS/2 أيضًا أمر EXTPROC. يقوم هذا الأمر بتمرير ملف الدفعات إلى البرنامج المُسمى في ملف EXTPROC كملف بيانات. يمكن أن يكون البرنامج المُسمى ملف نص برمجي؛ وهذا يُشبه آلية #! المُستخدمة في أنظمة التشغيل الشبيهة بنظام يونكس .
ويندوز إن تي
على عكس نظام التشغيل ويندوز 98 والإصدارات الأقدم، لا تعتمد عائلة أنظمة التشغيل ويندوز NT على نظام MS-DOS. قدّم ويندوز NT مُفسّر أوامر مُحسّنًا 32 بت ( cmd.exe ) يُمكنه تشغيل البرامج النصية ذات الامتداد .CMD أو .BAT. أضاف cmd.exe أوامر إضافية، ونفّذ الأوامر الموجودة بطريقة مختلفة قليلاً، بحيث قد يعمل ملف الدُفعة نفسه (بامتداد مختلف) بشكل مختلف مع cmd.exe وCOMMAND.COM. في معظم الحالات، يكون التشغيل متطابقًا إذا لم تُستخدم الأوامر القليلة غير المدعومة. يُمكن تعطيل امتدادات cmd.exe إلى COMMAND.COM لتحقيق التوافق.
أصدرت مايكروسوفت نسخة من cmd.exe لنظامي التشغيل Windows 9x و ME تسمى WIN95CMD للسماح لمستخدمي الإصدارات القديمة من Windows باستخدام ملفات دفعية معينة على غرار cmd.exe.
اعتبارًا من نظام التشغيل ويندوز 8يُعدّ cmd.exe مُفسّر الأوامر العادي لملفات الدفعات؛ ويمكن تشغيل COMMAND.COM الأقدم أيضًا في إصدارات 32 بت من نظام التشغيل Windows القادرة على تشغيل برامج 16 بت. [ ملاحظة 1 ]
امتدادات أسماء الملفات
- .bat
- أول امتداد لأسماء الملفات استخدمته مايكروسوفت لملفات الدفعات. يعمل هذا الامتداد مع نظام DOS وجميع إصدارات ويندوز، ضمن COMMAND.COM أو cmd.exe، على الرغم من اختلاف طريقة تنفيذ ملفات الدفعات بين مُفسِّري الأوامر.
- .cmd
- يُستخدم هذا الامتداد لملفات الدفعات في أنظمة ويندوز NT ، حيث تُرسل إلى cmd.exe لتفسيرها. لا يتعرف COMMAND.COM على هذا الامتداد، لذا لا تُنفذ نصوص cmd.exe في بيئة ويندوز خاطئة عن طريق الخطأ. إضافةً إلى ذلك، عند تنفيذ أوامر مثل
append`--`dpathو`ftype--` و`set--` و`path--` من ملف .bat، فإنها تُغير قيمة المتغير فقط عند حدوث خطأ، بينما عند تنفيذها من ملف .cmd، فإنها تُؤثر على مستوى الخطأ حتى عند عدم وجود خطأ. [ 3 ] كما يُستخدم هذا الامتداد في نظام التشغيل OS/2 من IBM لملفات الدفعات.assocprompterrorlevel - .btm
- الامتداد المستخدم في أنظمة 4DOS و 4OS2 و 4NT و Take Command . تتميز هذه البرامج النصية بسرعة أكبر، خاصةً مع البرامج النصية الطويلة، حيث يتم تحميل البرنامج النصي بالكامل وجاهزًا للتنفيذ، بدلاً من تحميله سطرًا بسطر. [ 4 ]
يمكن لـ COMMAND.COM و cmd.exe تشغيل ملف دفعي حتى لو تم كتابة اسم الملف بدون امتداد. على سبيل المثال، إذا DoThisتم إدخال `..com`، فسيحاول المفسر الامتدادات التالية بالترتيب المذكور: COM`..com` .EXE، ` .BAT..com`، .CMD`..com`، وسبعة امتدادات أخرى لا علاقة لها بهذا الموضوع. يمكن لمتغير البيئة PATHEXT تغيير الإعداد الافتراضي المذكور.
معلمات ملف الدفعات
يدعم كل من COMMAND.COM وcmd.exe متغيرات خاصة ( %0من %10 إلى 1 %9) للإشارة إلى مسار واسم مهمة الدُفعة وأول تسعة معلمات استدعاء من داخلها، انظر أيضًا [المصدر] SHIFT. تُستبدل المعلمات غير الموجودة بسلسلة نصية فارغة. يمكن استخدامها بشكل مشابه لمتغيرات البيئة ، ولكنها لا تُخزن فيها. تُشير مايكروسوفت وآي بي إم إلى هذه المتغيرات باسم معلمات الاستبدال أو المعلمات القابلة للاستبدال ، بينما استخدمت شركات Digital Research وNovell وCaldera مصطلح " متغيرات الاستبدال" [ 5 ] . وتُطلق عليها شركة JP Software اسم " معلمات ملفات الدُفعة " [ 6 ] .
أمثلة
يعرض ملف الدُفعة هذا مثالاً Hello World!، ويطلب من المستخدم الضغط على مفتاح، ثم ينتظر منه ذلك، ثم يُنهي العملية. (يمكن كتابة الأوامر بأحرف صغيرة أو كبيرة، لكن أسماء المتغيرات حساسة لحالة الأحرف).
@ ECHO OFF ECHO مرحباً بالعالم! توقف مؤقتلتنفيذ الملف، يجب حفظه بامتداد اسم الملف .bat (أو .cmd لأنظمة التشغيل من نوع Windows NT) بتنسيق نص عادي، ويتم إنشاؤه عادةً باستخدام محرر نصوص مثل Microsoft Notepad أو معالج كلمات يعمل في وضع النص العادي.
عند التنفيذ، يتم عرض ما يلي:
مرحبا بالعالم! اضغط على أي مفتاح للمتابعة...
توضيح
ينفذ المفسر كل سطر بالتتابع، بدءًا من السطر الأول. @يمنع الرمز الموجود في بداية أي سطر موجه الأوامر من عرض ذلك الأمر أثناء تنفيذه. ECHO OFFيُوقف الأمر موجه الأوامر نهائيًا، أو حتى يتم تشغيله مرة أخرى. @ECHO OFFغالبًا ما يكون هذا السطر، كما هو الحال هنا، هو السطر الأول من ملف دفعي، مما يمنع عرض أي أوامر، بما في ذلك الأمر نفسه. ثم يُنفذ السطر التالي ويُخرج ECHO Hello World!الأمر Hello World!. يُنفذ السطر التالي ويُعرض PAUSEالأمر Press any key to continue . . .ويوقف تنفيذ البرنامج النصي مؤقتًا. بعد الضغط على مفتاح، ينتهي البرنامج النصي، حيث لا توجد أوامر أخرى. في نظام التشغيل Windows، إذا تم تنفيذ البرنامج النصي من نافذة موجه أوامر قيد التشغيل بالفعل ، فستبقى النافذة مفتوحة على موجه الأوامر كما هو الحال في نظام MS-DOS؛ وإلا، فستُغلق النافذة عند الإنهاء.
القيود والاستثناءات
القيم الفارغة في المتغيرات
تُستبدل توسعات المتغيرات نصيًا في الأمر، وبالتالي تختفي المتغيرات التي لا تحتوي على أي قيمة من الصيغة، وتتحول المتغيرات التي تحتوي على مسافات إلى رموز متعددة. قد يؤدي هذا إلى أخطاء في الصيغة أو مشاكل برمجية.
على سبيل المثال، إذا كانت %foo% فارغة، فإن هذه العبارة:
إذا كان %foo% يساوي bar ، فاعرض " يساوي ". يُحلل على أنه بناء خاطئ:
إذا كان يساوي شريطًا، فأظهر "يساوي".وبالمثل، إذا %foo%احتوى على abc def، فسينتج خطأ في بناء الجملة مختلف:
إذا كان تعريف abc يساوي bar ، فاعرض " يساوي ". الطريقة المعتادة لتجنب هذه المشكلة هي وضع توسيعات المتغيرات بين علامتي اقتباس، بحيث يتوسع المتغير الفارغ إلى التعبير الصحيح IF ""=="bar"بدلاً من التعبير غير الصحيح IF ==bar. يجب أيضاً وضع النص الذي تتم مقارنته بالمتغير بين علامتي اقتباس، لأن علامات الاقتباس ليست صيغة فاصلة خاصة؛ فهذه الأحرف تمثل نفسها.
إذا كانت " %foo% " تساوي "bar" ، فاعرض " يساوي" يمكن استخدام خاصية التوسيع المؤجل !VARIABLE! المتوفرة في نظام التشغيل Windows 2000 والإصدارات الأحدث لتجنب هذه الأخطاء النحوية. في هذه الحالة، لا تُسبب المتغيرات الفارغة أو متعددة الكلمات أخطاءً نحوية لأن القيمة تُوسّع بعد تحليل أمر IF.
إذا كان !foo! يساوي bar ، فأظهر "يساوي ". يتمثل أحد الاختلافات الأخرى في نظام التشغيل Windows 2000 والإصدارات الأحدث في عدم استبدال المتغير الفارغ (غير المُعرَّف). وكما هو موضح في الأمثلة السابقة، كان سلوك مُفسِّر الدفعات السابق يُنتج سلسلة نصية فارغة. مثال:
C:\> set MyVar = C:\> echo %MyVar% %MyVar%C:\> إذا كان " %MyVar% " يساوي "" ( اطبع "MyVar غير مُعرّف ") وإلا ( اطبع "MyVar هو %MyVar% ") MyVar هو %MyVar%كانت برامج الترجمة الآلية قبل نظام التشغيل Windows 2000 ستعرض النتيجة MyVar is not defined.
علامات الاقتباس والمسافات في السلاسل النصية المُمرَّرة
على عكس عمليات يونكس/بوسيكس، التي تتلقى وسائط سطر الأوامر مُقسّمة مسبقًا بواسطة الصدفة إلى مصفوفة من السلاسل النصية، تتلقى عملية ويندوز سطر الأوامر كاملًا كسلسلة نصية واحدة، عبر دالة GetCommandLine API. ونتيجةً لذلك، يمكن لكل تطبيق ويندوز تنفيذ محلل خاص به لتقسيم سطر الأوامر إلى وسائط. وقد طوّرت العديد من التطبيقات وأدوات سطر الأوامر صيغها الخاصة للقيام بذلك، ولذا لا يوجد اصطلاح موحد لوضع علامات الاقتباس أو الهروب من الأحرف الخاصة في أوامر ويندوز.
- في بعض الأوامر، تُعامل المسافات كفواصل تفصل بين الوسائط، ما لم تكن هذه المسافات محاطة بعلامات اقتباس. وتوجد اصطلاحات مختلفة لكيفية تمرير علامات الاقتباس إلى التطبيق.
- يُستخدم اصطلاح شائع في محلل سطر الأوامر المدمج في مكتبة وقت تشغيل Microsoft Visual C++ أو في الدالة CommandLineToArgvW. وينص هذا الاصطلاح على أن 2n من الشرطات المائلة العكسية متبوعة بعلامة اقتباس (") تُنتج n من الشرطات المائلة العكسية متبوعة بعلامة اقتباس بداية/نهاية، بينما (2n ) + 1 من الشرطات المائلة العكسية متبوعة بعلامة اقتباس تُنتج n من الشرطات المائلة العكسية متبوعة بعلامة اقتباس حرفية. ويُعد هذا الاصطلاح جزءًا من مواصفات إطار عمل .NET . [ 7 ]
- من الجوانب غير الموثقة أن ظهور علامة الاقتباس المفردة "" في منتصف سلسلة نصية مُقتبسة يُنتج علامة اقتباس مفردة. [ 7 ] (عدّل تغيير في مكتبة CRT عام 2008 [msvcr90] هذه المعالجة غير الموثقة لعلامات الاقتباس. [ 8 ] ) يُفيد هذا في إدراج علامة اقتباس في وسيط دون إعادة تفعيل تفسير الأحرف الخاصة بـ cmd مثل | و & و > . (لا يتعرف cmd على علامة الاقتباس المفردة "\" كعلامة هروب من الاقتباس. بل يُعيد تفعيل هذه المعاني الخاصة عند رؤية علامة الاقتباس، ظنًا منه أن الاقتباس قد انتهى.)
- ومن الأعراف الأخرى عدم تضمين علامة الاقتباس المفردة ( " ) ضمن النص. مع ذلك، يمكن تضمين علامة الاقتباس المُهرّبة ( """ ) ضمن النص.
- ثمة اصطلاح شائع آخر ناتج عن استخدام البرامج المُحولة من Cygwin . وهو لا يُميز بين ظهور الشرطات المائلة العكسية قبل علامات الاقتباس أو بعدها. انظر glob (البرمجة) § ويندوز ودوس للحصول على معلومات حول مُحللات سطر الأوامر البديلة هذه. [ 9 ]
- تستخدم بعض أوامر ويندوز المهمة، مثل
cmd.exeوwscript.exe، قواعدها الخاصة. [ 8 ]
- يُستخدم اصطلاح شائع في محلل سطر الأوامر المدمج في مكتبة وقت تشغيل Microsoft Visual C++ أو في الدالة CommandLineToArgvW. وينص هذا الاصطلاح على أن 2n من الشرطات المائلة العكسية متبوعة بعلامة اقتباس (") تُنتج n من الشرطات المائلة العكسية متبوعة بعلامة اقتباس بداية/نهاية، بينما (2n ) + 1 من الشرطات المائلة العكسية متبوعة بعلامة اقتباس تُنتج n من الشرطات المائلة العكسية متبوعة بعلامة اقتباس حرفية. ويُعد هذا الاصطلاح جزءًا من مواصفات إطار عمل .NET . [ 7 ]
- بالنسبة للأوامر الأخرى، لا تُعامل المسافات كفواصل، وبالتالي لا تحتاج إلى علامات اقتباس. إذا تم تضمين علامات اقتباس، فإنها تُصبح جزءًا من السلسلة النصية. ينطبق هذا على بعض الأوامر المدمجة مثل الأمر echo .
عندما تحتوي سلسلة نصية على علامات اقتباس، ويراد إدراجها في سطر نصي آخر يجب أن يكون محاطًا أيضًا بعلامات اقتباس، يلزم إيلاء اهتمام خاص لآلية الاقتباس:
C:\> set foo = "هذه السلسلة محاطة بعلامات اقتباس"C:\> echo "test 1 %foo% " "test 1 "هذه السلسلة محاطة بعلامات اقتباس""C:\> eventcreate /T تحذير /ID 1 /L نظام /SO "المصدر" /D "مثال: %foo% " خطأ: وسيطة/خيار غير صالح - 'سلسلة نصية'. اكتب "EVENTCREATE /?" للاستخدام.في نظام التشغيل Windows 2000 والإصدارات الأحدث، يتمثل الحل في استبدال كل ظهور لعلامة اقتباس داخل قيمة ما بسلسلة من ثلاث علامات اقتباس:
C:\> set foo = "هذه السلسلة محاطة بعلامات اقتباس"C:\> set foo = %foo:""""%C:\> echo "test 1 %foo% " "test 1 """هذه السلسلة محاطة بعلامات اقتباس""""C:\> eventcreate /T Warning /ID 1 /L System /SO "Source" /D "Example: %foo% " SUCCESS: A A 'Warning' type event is created in the 'Source' log/source.الأحرف المُهرّبة في السلاسل النصية
بعض الأحرف، مثل |رمز الأنبوب () ، لها معنى خاص في سطر الأوامر. لا يمكن طباعتها كنص باستخدام أمر ECHO إلا إذا تم وضع علامة الهروب (^) قبلها.
C:\> echo foo | bar 'bar' غير معترف به كأمر داخلي أو خارجي، أو برنامج قابل للتنفيذ، أو ملف دفعي.C:\> echo foo ^| bar foo | barمع ذلك، لا يعمل الهروب كما هو متوقع عند إدراج الحرف المُهَرَّب في متغير بيئي. ينتهي الأمر بالمتغير باحتواء أمر "live pipe" عند طباعته فقط. من الضروري تهريب كل من علامة الإقحام نفسها والحرف المُهَرَّب لعرض الحرف كنص في المتغير.
C:\> set foo = bar | baz 'baz' غير معترف به كأمر داخلي أو خارجي، أو برنامج قابل للتنفيذ، أو ملف دفعي.C:\> set foo = bar ^| baz C:\> echo %foo% 'baz' غير معترف به كأمر داخلي أو خارجي، أو برنامج قابل للتنفيذ، أو ملف دفعي.C:\> set foo = bar ^^^| baz C:\> echo %foo% bar | بازيمكن استخدام خاصية التوسيع المتأخر المتوفرة مع أو مع في نظام التشغيل Windows 2000 والإصدارات الأحدث لعرض الأحرف الخاصة المخزنة في متغيرات البيئة، لأن قيمة المتغير يتم توسيعها بعد تحليل الأمر:
C:\> cmd /V:ON Microsoft Windows [الإصدار 6.1.7601] حقوق الطبع والنشر © 2009 لشركة Microsoft Corporation. جميع الحقوق محفوظة.C:\> set foo = bar ^| باز C:\> صدى !foo! شريط | بازالنوم أو التأخير المبرمج
حتى تم تقديم أمر TIMEOUT مع نظام التشغيل Windows Vista، لم تكن هناك طريقة سهلة لتنفيذ إيقاف مؤقت، حيث أن أمر PAUSE يوقف نشاط البرنامج النصي إلى أجل غير مسمى حتى يتم الضغط على أي مفتاح.
كانت هناك العديد من الحلول البديلة الممكنة، [ 10 ] ولكنها كانت تعمل عمومًا في بيئات محددة فقط: CHOICEلم يكن الأمر متاحًا في إصدارات DOS القديمة، PINGوكان متاحًا فقط في حال تثبيت TCP/IP، وما إلى ذلك. لم تُقدّم مايكروسوفت أي حل، ولكن كان بالإمكان تثبيت عدد من البرامج المساعدة الصغيرة من مصادر أخرى. ومن الأمثلة التجارية على ذلك أمر Norton Utilities Batch Enhancer (BE) الصادر عام 1988، والذي BE DELAY 18ينتظر لمدة ثانية واحدة، أو برنامج WAIT.COM المجاني بحجم 94 بايت [ 11 ] والذي WAIT 5ينتظر لمدة 5 ثوانٍ، ثم يُعيد التحكم إلى البرنامج النصي. معظم هذه البرامج عبارة عن ملفات .COM ذات 16 بت، لذا فهي غير متوافقة مع أنظمة ويندوز ذات 64 بت.
إخراج نصي مع حذف أحرف السطر الجديد والسطر الجديد
عادةً، يتم إلحاق أحرف التحكم الخاصة بإرجاع المؤشر (CR) وتغذية السطر (LF) تلقائيًا بنهاية كل سطر من النصوص المطبوعة.
- batchtest.bat
@echo foo @echo bar
C:\> batchtest.bat foo bar
لا يهم إذا كان أمرا echo يشتركان في نفس سطر الأوامر؛ يتم إدراج رموز CR/LF لتقسيم الإخراج إلى أسطر منفصلة:
C:\> @ echo Message 1 &@ echo Message 2 Message 1 Message 2إحدى الحيل التي تم اكتشافها في نظام التشغيل ويندوز 2000 والإصدارات الأحدث هي استخدام موجه الإدخال الخاص لإخراج النص بدون أحرف نهاية السطر (CR/LF). في هذا المثال، لا يظهر حرف نهاية السطر (CR/LF) بعد الرسالة 1، ولكنه يظهر بعد السطرين 2 و3.
- batchtest2.bat
@echo off set /p = "الرسالة 1" < nul echo الرسالة 2 echo الرسالة 3
C:\> batchtest2.bat الرسالة 1 الرسالة 2 الرسالة 3
يمكن استخدام هذا لإخراج البيانات إلى ملف نصي بدون إضافة CR/LF في النهاية:
C:\> set /p = "الرسالة 1" < nul > data.txt C:\> set /p = "الرسالة 2" < nul >> data.txt C:\> set /p = "الرسالة 3" < nul >> data.txt C:\> type data.txt الرسالة 1 الرسالة 2 الرسالة 3ومع ذلك، لا توجد طريقة لإدخال مخرجات موجه الأوامر المجردة CR/LF مباشرة في متغير بيئي.
تحديد دليل العمل باستخدام اصطلاح التسمية الموحد (UNC) من خلال اختصار
لا يمكن استخدام موجه أوامر يستخدم مسار UNC كدليل العمل الحالي؛ على سبيل المثال\\server\share\directory\
يتطلب موجه الأوامر استخدام أحرف محركات الأقراص لتعيين دليل العمل، مما يجعل تشغيل ملفات الدفعات المعقدة المخزنة على مشاركة UNC للخادم أكثر صعوبة. على الرغم من إمكانية تشغيل ملف دفعي من مسار ملف UNC، إلا أن دليل العمل الافتراضي هو C:\Windows\System32\.
في نظام التشغيل Windows 2000 والإصدارات الأحدث، يتمثل الحل البديل في استخدام الأمر " PUSHDو POPD" مع ملحقات الأوامر. [ ملاحظة 2 ]
إذا لم يتم تمكين ملحقات الأوامر بشكل افتراضي، فيمكن تمكينها مؤقتًا باستخدام مفتاح /E:ONالتبديل الخاص بمفسر الأوامر.
لذا، لتشغيل ملف دفعي على مشاركة UNC، وتعيين حرف محرك أقراص مؤقت لمشاركة UNC، واستخدام مشاركة UNC كدليل عمل للملف الدفعي، يمكن إنشاء اختصار Windows يبدو كالتالي:
- هدف:
يتم تجاهل سمة دليل العمل لهذا الاختصار.
يحل هذا أيضًا مشكلة متعلقة بميزة التحكم في حساب المستخدم (UAC) في نظامي التشغيل Windows Vista والإصدارات الأحدث. فعندما يسجل مسؤول الدخول مع تفعيل UAC، ويحاول تشغيل ملف دفعي كمسؤول من حرف محرك أقراص شبكي باستخدام قائمة السياق (النقر بزر الماوس الأيمن على الملف )، تفشل العملية بشكل غير متوقع. والسبب هو أن سياق حساب UAC ذي الصلاحيات المرتفعة لا يحتوي على أحرف محركات أقراص شبكية، ولا يمكن تعيين أحرف محركات أقراص لهذا السياق عبر مستكشف الملفات أو نصوص تسجيل الدخول. ولكن، بإنشاء اختصار للملف الدفعي باستخدام الصيغة المذكورة أعلاه PUSHD، POPDواستخدام هذا الاختصار لتشغيل الملف الدفعي كمسؤول، سيتم إنشاء حرف محرك أقراص مؤقت وإزالته من سياق الحساب ذي الصلاحيات المرتفعة، وسيعمل الملف الدفعي بشكل صحيح.
يتم توسيع الصيغة التالية بشكل صحيح إلى مسار ملف الدُفعة الحالي.
%~dp0
يتم تعطيل مسارات UNC الافتراضية بشكل افتراضي لأنها كانت تتسبب في تعطل البرامج القديمة. [ 12 ]
تسمح قيمة سجل Dword DisableUNCCheckفي HKEY_CURRENT_USER\Software\Microsoft\Command Processor[ 12 ] بأن يكون الدليل الافتراضي مسار UNC. CDسيرفض الأمر تغيير ذلك، ولكن يمكنك وضع مسار UNC في الدليل الافتراضي في اختصار لموجه الأوامر أو باستخدام أمر بدء التشغيل. ( C$المشاركة مخصصة للمسؤولين).
مجموعة الأحرف
تستخدم ملفات الدُفعات مجموعة أحرف خاصة بالشركة المصنعة للجهاز، كما هو مُحدد من قِبل الحاسوب، مثل صفحة الترميز 437. الأجزاء غير ASCII من هذه الأحرف غير متوافقة مع مجموعات أحرف Unicode أو Windows المُستخدمة في نظام Windows، لذا يجب توخي الحذر. [ 13 ] أسماء الملفات غير الإنجليزية تعمل فقط عند إدخالها عبر مُحرر متوافق مع مجموعة أحرف DOS. أسماء الملفات التي تحتوي على أحرف خارج هذه المجموعة لا تعمل في ملفات الدُفعات.
للحصول على موجه أوامر يدعم ترميز يونيكود بدلاً من صفحة الترميز 437 أو ما شابه، يمكن استخدام cmd /Uالأمر التالي. في موجه الأوامر هذا، سيعمل ملف دفعي يحتوي على أسماء ملفات يونيكود. كما يمكن استخدام الأمر التالي cmd /Uلتنفيذ الأوامر مباشرةً باستخدام يونيكود كمجموعة أحرف. على سبيل المثال، يُنشئ الأمر ملفًا يحتوي على قائمة دليل بأحرف ويندوز الصحيحة، بترميز UTF-16 LE.cmd /U /C dir > files.txt
الفيروسات والبرامج الضارة
كما هو الحال مع أي لغة برمجة أخرى، يمكن استخدام ملفات الدفعات لأغراض خبيثة. فمن السهل إنشاء برامج تجسس بسيطة وبرامج تجسس ذات شوكة ، ويمكن لملفات الدفعات أن تُلحق ضررًا بنظام أسماء النطاقات (DNS) عن طريق تعديل ملف المضيفين . كما أن فيروسات الدفعات ممكنة، ويمكنها أيضًا الانتشار عبر ذاكرة فلاش USB باستخدام خاصية التشغيل التلقائي في نظام ويندوز . [ 14 ]
سيؤدي الأمر التالي في ملف دفعي إلى حذف جميع البيانات الموجودة في الدليل (المجلد) الحالي - دون طلب تأكيد مسبق:
حذف /Q *.* هذه الأوامر الثلاثة عبارة عن قنبلة شوكية بسيطة ستكرر نفسها باستمرار لاستنزاف موارد النظام المتاحة، مما يؤدي إلى إبطاء النظام أو تعطلّه:
: ابدأ من الأعلى "" %0 انتقل إلى الأعلىلغات برمجة ويندوز الأخرى
يدعم نظام التشغيل Windows NT و Windows CE و ReactOS معالج الأوامر cmd.exe الذي يفسر ملفات .NET .batو .NET . أما معالج الأوامر الأقدم COMMAND.COM، الذي يفسر ملفات .NET فقط، فهو متوفر في Windows 9x وإصدارات Windows NT ذات 32 بت؛ لذا فهو غير متوفر في Windows 11 ، الذي يعمل بنظام 64 بت فقط..cmd.bat
لكن نظام التشغيل مايكروسوفت ويندوز يأتي مزودًا ببيئات برمجة نصية أكثر تقدمًا:
- برنامج Windows Script Host (مهمل) - صدر عام 1998 مع نظام التشغيل Windows 98 ، ويتكون من
cscript.exeوwscript.exe، ويقوم بتشغيل البرامج النصية المكتوبة بلغة VBScript أو JScript (ذات الامتدادات .vbs و .js و .wsf ). ويمكنه تشغيلها في وضع النافذة (معwscript.exeالمضيف) أو في وضع سطر الأوامر (معcscript.exeالمضيف). وقد تم إيقاف دعمه في نظام التشغيل Windows 11 . - MSHTA (مهملة) - تم تقديمها إلى Microsoft Windows في عام 1999، جنبًا إلى جنب مع إصدار Microsoft Internet Explorer 5،
mshta.exeوهي وسيلة لإنشاء نصوص غنية بالرسومات يتكون رمزها المصدر من HTML و CSS و JScript . - باور شيل — بيئة أوامر مجانية، مفتوحة المصدر ، متعددة المنصات ، وموجهة للكائنات ، تستفيد من واجهات برمجة تطبيقات .NET . صدرت باور شيل لأول مرة عام 2006 كإضافة مغلقة المصدر لنظامي التشغيل ويندوز إكس بي وويندوز فيستا ، ثم أصبحت جزءًا لا يتجزأ من جميع إصدارات ويندوز اللاحقة. بعد عشر سنوات، أصبحت باور شيل مفتوحة المصدر ومتعددة المنصات. يمكنها العمل بشكل تفاعلي (عبر واجهة سطر الأوامر) وأيضًا عبر البرامج النصية المحفوظة ( ملفات .ps1 ). يمكن توسيع نطاق باور شيل بشكل أكبر من خلال وحدات البرامج النصية ( ملفات .psm ) والوحدات الثنائية ( ملفات .dll ). تستخدم أوامر باور شيل صيغة "الفعل-الاسم" لتسهيل اكتشافها بسرعة.
توجد لغات برمجة نصية أخرى متاحة لنظام ويندوز. ومع ذلك، تتطلب هذه اللغات تثبيت مترجم لغة البرمجة النصية قبل استخدامها.
- لغة الدفعات الموسعة (EBL) ( .bat ) - تم تطويرها بواسطة فرانك كانوفا كمشروع "وقت خاص" أثناء عمله في شركة IBM في عام 1982. تم بيعها لاحقًا بواسطة شركة Seaware Corp كمترجم ومترجم في المقام الأول لنظام DOS، ولكن لاحقًا لنظام Windows.
- KiXtart ( .kix ) — تم تطويره بواسطة موظف في مايكروسوفت في عام 1991، خصيصًا لتلبية الحاجة إلى أوامر مفيدة في برنامج نصي لتسجيل الدخول إلى الشبكة مع الحفاظ على "الشعور" البسيط لملف .cmd.
- يمكن استخدام لغات برمجة shell على نمط Unix إذا تم تثبيت أداة توافق Unix مثل Cygwin ، أو تم استخدام نظام Windows الفرعي لنظام Linux (WSL).
- تتوفر أدوات البرمجة النصية متعددة المنصات بما في ذلك Perl و Python و Ruby و Rexx و Node.js و PHP لنظام التشغيل Windows.
انظر أيضاً
- قائمة أوامر نظام التشغيل DOS
- سكريبت شل ، وهو "ملف دفعي" في أنظمة يونكس ولينكس
ملحوظات
- ↑ للتحقق من أن COMMAND.COM لا يزال متاحًا (في الدليل \WINDOWS\SYSTEM32)، اكتب
COMMAND.COMفي موجه أوامر Windows 7 ذي 32 بت. - ↑ "إذا كانت ملحقات الأوامر مُفعّلة، فإن أمر PUSHD يقبل مسارات الشبكة بالإضافة إلى حرف محرك الأقراص والمسار العاديين. عند تحديد مسار شبكة، يُنشئ PUSHD حرف محرك أقراص مؤقتًا يُشير إلى مورد الشبكة المُحدد، ثم يُغيّر محرك الأقراص والمجلد الحاليين باستخدام حرف محرك الأقراص المُعرّف حديثًا. تُخصّص أحرف محركات الأقراص المؤقتة بدءًا من Z: نزولًا، باستخدام أول حرف محرك أقراص غير مُستخدم يتم العثور عليه." -- تعليمات PUSHD في نظام التشغيل Windows 7
مراجع
- ↑ "استخدام ملفات الدفعات: البرمجة النصية؛ خدمات الإدارة" . Technet.microsoft.com. 21 يناير 2005. مؤرشف من الأصل في 28 ديسمبر 2011. تم الاطلاع عليه في 30 نوفمبر 2012 .
- ↑ هنري-ستوكر، ساندرا (18 يوليو 2007). "استخدم مهاراتك في برمجة يونكس لكتابة ملف دفعي" . itworld.com . عالم تكنولوجيا المعلومات. مؤرشف من الأصل في 14 يونيو 2018. تم الاطلاع عليه في 13 يونيو 2018 .
- ↑ " الفرق بين bat و cmd | WWoIT - عالم واين لتكنولوجيا المعلومات" . waynes-world-it.blogspot.fr . ١٥ نوفمبر ٢٠١٢. مؤرشف من الأصل في ٢ مارس ٢٠١٤. تم الاطلاع عليه في ٣٠ نوفمبر ٢٠١٢ .
- ↑ "امتداد ملف btm :: كل ما يتعلق بنوع ملف .btm" . Cryer.co.uk. مؤرشف من الأصل بتاريخ 11-10-2008 . تم الاطلاع عليه بتاريخ 30-11-2012 .
- ↑ دليل مستخدم Caldera DR-DOS 7.02 ، شركة Caldera ، 1998 [1993، 1997]، مؤرشف من الأصل بتاريخ 2016-11-05 ، تم استرجاعه بتاريخ 2013-08-10
- ↑ براذرز، هاردين؛ راوسون، توم ؛ كون، ريكس سي .؛ بول، ماتياس ر.؛ داي، تشارلز إي.؛ جورجيف، لوتشيزار آي. (27-02-2002). المساعدة عبر الإنترنت لنظام 4DOS 8.00 .
- ١ ٢ ".NET Core Runtime: System.Diagnostics.Process.Unix" . GitHub . مؤرشف من الأصل بتاريخ ٢٠٢٣-٠٣-٢٩ . تم الاسترجاع بتاريخ ٢٠٢٠-٠٢-١١ .
يجب أن ينتج عن علامتي اقتباس مزدوجتين متتاليتين داخل منطقة inQuotes علامة اقتباس مزدوجة حرفية (يبقى المحلل في منطقة inQuotes). هذا السلوك ليس جزءًا من مواصفات code:ParseArgumentsIntoList، ولكنه متوافق مع CRT و.NET Framework.
- 1 2 ديلي، ديفيد. "كيفية تحليل معلمات سطر الأوامر" . مؤرشف من الأصل بتاريخ 2020-06-08 . تم الاسترجاع بتاريخ 2020-06-08 .
- ↑ "توثيق العمليات الفرعية، قسم سطر أوامر ويندوز، طلب سحب NodeJS رقم 29576" . جيت هاب . مؤرشف من الأصل بتاريخ 21 أغسطس 2022. تم الاطلاع عليه بتاريخ 11 فبراير 2020 .
- ↑ "كيفية عمل تأخير" مؤرشف بتاريخ 20 نوفمبر 2011 في Wayback Machine ، ericphelps.com
- ↑ "أدوات مساعدة لنظام DOS، تتضمن روابط إلى WAIT.ZIP (أرشيف WAIT.COM) وبرامج أخرى" . مؤرشف من الأصل بتاريخ 13 نوفمبر 2011. تم الاطلاع عليه بتاريخ 15 نوفمبر 2011 .
- ١ ٢ "لا يدعم Cmd.exe أسماء UNC كدليل حالي" . مؤرشف من الأصل بتاريخ ١٨ مايو ٢٠١٥. تم الاطلاع عليه بتاريخ ٢٨ أبريل ٢٠١٥ .
- ↑ تشين، ريموند . "راقب صفحة الترميز" . مايكروسوفت . مؤرشف من الأصل بتاريخ 17 يناير 2012. تم الاطلاع عليه بتاريخ 13 ديسمبر 2011 .
- ↑ ملفات الدفعات - فن إنشاء الفيروسات (مؤرشف بتاريخ ٢٩ أكتوبر ٢٠١٣ في أرشيف الإنترنت)
روابط خارجية
- مرجع ملفات الدفعات لنظام التشغيل Microsoft Windows XP
- أوامر ملفات الدفعات في نظام التشغيل ويندوز 10
- روابط برمجة واجهة سطر أوامر ويندوز
- نظام التشغيل DOS على أجهزة الكمبيوتر الشخصية المتوافقة مع IBM
- إدارة نظام التشغيل ويندوز
- لغات البرمجة النصية
