شرح - ملفات دفعية Windows:.bat vs.cmd؟




اوامر ملفات bat (10)

كما أفهمها ، .bat هو اصطلاح تسمية 16 بت القديم و. .cmd لـ Windows 32-بت ، أي بدءاً بـ NT. ولكن ما زلت أرى ملفات .bat في كل مكان ، ويبدو أنها تعمل بنفس الطريقة باستخدام لاحقة. بافتراض أن شفرتي لن تحتاج أبداً للتشغيل على أي شيء أقدم من NT ، فهل يهم حقا طريقة تسمية الملفات الدفعية الخاصة بي ، أم أن هناك بعض gotcha تنتظرني باستخدام لاحقة خاطئة؟


.cmd و. b تنفيذ ملف مختلف لأنه في متغير errorlevel .cmd يمكن تغييره على أمر متأثر بواسطة ملحقات الأمر. هذا عن ذلك حقا.


أعتقد أنه إذا قمت بتغيير قيمة متغير بيئة ComSpec إلى٪ SystemRoot٪ system32 \ cmd.exe فلا يهم إذا كان ملحق الملف .BAT أو. CMD. لست متأكدًا ، ولكن قد يكون هذا هو الإعداد الافتراضي لبرنامج WinXP والإصدارات الأحدث.


خارج الموضوع قليلاً ، ولكن هل فكرت في Windows Scripting Host ؟ قد تجد أنه أجمل.


فرق:

يتم تحميل ملفات .cmd في الذاكرة قبل أن يتم تنفيذها. ملفات .bat تنفيذ سطر ، قراءة السطر التالي ، تنفيذ هذا الخط ...

يمكنك أن تصادف هذا عند تنفيذ ملف نصي ثم تحريره قبل الانتهاء من التنفيذ. سيتم العبث ملفات الخفافيش من قبل هذا ، ولكن ملفات cmd لن.


كل شيء يعمل في دفعة يجب أن يعمل في كمد. يوفر cmd بعض الامتدادات للتحكم في البيئة. أيضاً ، يتم تنفيذ cmd بواسطة مترجم cmd جديد وبالتالي يجب أن يكون أسرع (غير ملحوظ على الملفات القصيرة) و stabler أثناء تشغيل الخفافيش تحت بيئة 16bit NTVDM التي تمت مضاهاتها


لا - لا يهم في أدنى. في NT يتسبب ملحق .bat و .cmd المعالج cmd.exe لمعالجة الملف بنفس الطريقة بالضبط.

معلومات إضافية هامة حول command.com مقابل. cmd.exe على أنظمة فئة WinNT من MS TechNet ( http://technet.microsoft.com/en-us/library/cc723564.aspx ):

يكشف هذا السلوك عن ميزة غير دقيق جداً من Windows NT مهم جداً. تم تصميم shell MS-DOS 16 بت (COMMAND.COM) الذي يأتي مع Windows NT خصيصاً لـ Windows NT. عندما يتم إدخال أمر للتنفيذ بواسطة shell ، فإنه لا يتم تنفيذه بالفعل. بدلاً من ذلك ، فإنه حزم النص الأمر وإرساله إلى shell 32-bit CMD.EXE للتنفيذ. لأنه يتم تنفيذ كافة الأوامر بالفعل بواسطة CMD.EXE (shell أمر Windows NT) ، يرث shell 16 بت كافة الميزات والمرافق shell Windows NT الكامل.


نظرًا لأن المشاركة الأصلية كانت تتعلق بعواقب استخدام .bat أو لاحقة .cmd ، وليس بالضرورة الأوامر داخل الملف ...

أحد الاختلافات الأخرى بين .bat و .cmd هو أنه في حالة وجود ملفين بنفس اسم الملف وكلاهما ملحقان ، فحينئذٍ:

  • إدخال اسم الملف أو اسم الملف .bat في سطر الأوامر سيتم تشغيل ملف. bat

  • لتشغيل الملف .cmd ، يجب إدخال اسم الملف .cmd


هذه الإجابات طويلة جدًا وتركز على الاستخدام التفاعلي. الاختلافات المهمة هي:

  • .cmd يمنع التنفيذ غير المقصود على أنظمة غير NT.
  • يمكن .cmd أوامر مدمجة لتغيير Errorlevel إلى 0 على النجاح.

تحرير: يتم تشغيل "ملحقات الأوامر" بشكل افتراضي في ملفات .bat و .cmd تحت Windows 2000 أو أحدث.

في عام 2012 وما بعده ، أوصي باستخدام .cmd حصرا.


وباعتبارك مبرمجًا Cmd ، وتبحث في جميع أنحاء الويب ، فلا يهم أيًا منها تستخدمه ، يمكنك الحصول على برنامج .bat على Windows 7 ، وتشغيله على Windows 10. ولكن إذا كنت تريد على Windows 10 ، من المحتمل أنك لن تكون قادرًا على تشغيل جميع الأوامر الموجودة على Windows 7. أما .cmd فهي بنفس الطريقة بالضبط ، وتدير نفس البرنامج والرموز بالضبط.

كل الفرق ، هو أنه اسم مختلف لنفس البرنامج ، طالما أنه متصل CMD.EXE ، فإنه يعمل على نفس الأوامر.


ومع ذلك ، في ملفات Windows 7 ، يكون لملفات BAT هذا الاختلاف أيضًا: إذا قمت بإنشاء ملفات TEST.BAT و TEST.CMD في نفس الدليل ، وقمت بتشغيل TEST في هذا الدليل ، فستقوم بتشغيل الملف BAT.

C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

C:\Temp>echo echo bat > test.bat

C:\Temp>echo echo cmd > test.cmd

C:\Temp>test

C:\Temp>echo bat
bat

C:\Temp>




cmd