batch file - شرح - كيفية تشغيل ملفات.BAT متعددة داخل ملف.BAT




how to make cmd batch file (9)

أنت تدعو عدة دفعات في محاولة لتجميع برنامج. أنا من المسلم به أنه في حالة حدوث خطأ:
1) سوف يخرج البرنامج داخل الدفعة مع errorlevel؛
2) تريد معرفة ذلك.

for %%b in ("msbuild.bat" "unit-tests.bat" "deploy.bat") do call %%b|| exit /b 1

'||' اختبارات للخطأ أعلى من 0. وبهذه الطريقة يتم استدعاء جميع دفعات في الترتيب ولكن ستتوقف عند أي خطأ ، وترك الشاشة كما هو الحال بالنسبة لك أن ترى أي رسالة خطأ.

أحاول الحصول على commit-build.bat لتنفيذ ملفات .BAT الأخرى كجزء من عملية commit-build.bat الخاصة بنا.

محتوى commit-build.bat :

"msbuild.bat"
"unit-tests.bat"
"deploy.bat"

يبدو هذا بسيطاً بما فيه الكفاية ولكن commit-build.bat فقط تنفيذ العنصر الأول في القائمة ( msbuild.bat ).

لقد قمت بتشغيل كل من الملفات على حدة دون أي مشاكل.


إذا أردنا فتح موجه أوامر متعدد ، فيمكننا استخدام

start cmd /k 

/k : إجباري سيتم تنفيذه.

إطلاق العديد من أوامر القيادة يمكن القيام به على النحو التالي.

start cmd /k Call rc_hub.bat 4444

start cmd /k Call rc_grid1.bat 5555

start cmd /k Call rc_grid1.bat 6666

start cmd /k Call rc_grid1.bat 5570.

إذا كنت ترغب في فتح العديد من الملفات الدفعية دفعة واحدة ، يمكنك استخدام أمر الاتصال ، إلا أن الأمر call يقوم بإغلاق ملف bat الحالي وينتقل إلى ملف آخر إذا كنت تريد فتح العديد في وقت واحد قد ترغب في تجربة هذا الأمر.

@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat" 

وهكذا أو كرر بدء cmd " call ..." مع العديد من الملفات. هذا يعمل ل WIN 7 غير متأكد من الأنظمة الأخرى.


استعمال

call msbuild.bat
call unit-tests.bat
call deploy.bat

عند عدم استخدام CALL ، يتوقف الملف الدفعي الحالي ويبدأ تنفيذ الملف الدفعي المدعو. إنه سلوك غريب يعود إلى أيام MS-DOS المبكرة


تشغيل البرامج النصية متعددة في واحد كان لي نفس المشكلة. ظللت أموت على أنه الأول على عدم إدراك أنه كان الخروج على النص الأول.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

:: ScriptA.bat
Do Foo
EXIT
::ScriptB.bat
Do bar
EXIT

قمت بإزالة جميع الخطوط النصية EXIT الخاصة بـ 11 وحاولت مرة أخرى وركض 11 مرة كل منها في نفس الوقت في نفس نافذة الأوامر.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar

جميع الإجابات الأخرى صحيحة: استخدم الاتصال. فمثلا:

 call "msbuild.bat"

التاريخ

في إصدارات دوس القديمة لم يكن من الممكن بشكل متكرر تنفيذ ملفات دفعية. ثم تم إدخال الأمر call الذي يسمى shell cmd آخر لتنفيذ الملف الدفعي وإرجاع التنفيذ مرة أخرى إلى shell cmd استدعاء عند الانتهاء.

من الواضح في الإصدارات الأحدث لم تعد هناك حاجة لقشرة كمد أخرى.

في الأيام الأولى اعتمد العديد من الملفات الدفعية على حقيقة أن استدعاء ملف دفعي لن ترجع إلى ملف الدُفعة الاستدعاء. تغيير هذا السلوك دون بناء جملة إضافية قد كسرت العديد من الأنظمة مثل أنظمة قوائم دفعية (باستخدام ملفات دفعية لهياكل القائمة).

كما هو الحال في العديد من الحالات مع Microsoft ، لذلك يكون التوافق مع الإصدارات السابقة هو سبب هذا السلوك.

نصائح

إذا كانت ملفات الدُفعات الخاصة بك تحتوي على مسافات في أسمائها ، فاستخدم علامات اقتباس حول الاسم:

call "unit tests.bat"

بالمناسبة: إذا لم يكن لديك جميع أسماء الملفات الدفعية ، فيمكنك أيضًا استخدامها للقيام بذلك: (لا تضمن الترتيب الصحيح لمكالمات الملفات الدفعية ، تتبع أمر نظام الملفات)

FOR %x IN (*.bat) DO call "%x"

يمكنك أيضًا التفاعل مع errorlevels بعد إجراء مكالمة. استعمال

exit /B 1   # or any other integer value in 0..255

لاعادة errorlevel. 0 يدل على التنفيذ الصحيح. في الملف الدفعي للمكالمة يمكنك الرد باستخدام

if errorlevel neq 0 <batch command>

استخدمه إذا كان لديك errorlevel 1 إذا كان لديك نظام تشغيل قديم من Windows ثم NT4 / 2000 / XP للقبض على جميع أخطاء الخطأ 1 وأكبر.

للتحكم في تدفق ملف دفعي ، يوجد goto :-(

if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...

كما أشار آخرون: إلقاء نظرة على أنظمة البناء لاستبدال الملفات الدفعية.


مجرد استخدام الأمر call ! هنا مثال:

call msbuild.bat
call unit-tests.bat
call deploy.bat

في صحتك!


محاولة

call msbuild.bat
call unit-tests.bat
call deploy.bat

call msbuild.bat
call unit-tests.bat
call deploy.bat




cmd