دوره‌ های آموزشی نووا
فوریه 13, 2021

کدهای برگشتی در بچ اسکریپت

Avatar photo
برنامه نویس MERN Stack
کدهای برگشتی در بچ اسکریپت

در فصل قبل (شرطی سازی در بچ اسکریپت) اندکی با کدهای برگشتی یا همان Return Code ها آشنا شدید و فهمیدید هر دستور یا برنامه ای که در CMD یا Batch File اجرا میشود، یک کد برگشتی دارد و آن کد مشخص میکند که برنامه یا دستور اجرا شده به درستی عمل کرده یا با خطا مواجه شده است. در این فصل به صورت کامل در مورد کدهای برگشتی در بچ اسکریپت صحبت خواهیم نمود. همراه با نووا بلاگ باشید.

کدهای برگشتی یا Return Code ها چیستند؟

به طور کلی زمانیکه در CMD یک برنامه را اجرا میکنید یا برنامه به درستی اجرا میشود یا اینکه با خطا مواجه شده و عمل آن متوقف میشود. کد های برگشتی یا Return Code ها به شما کمک میکنند تا از عملکرد صحیح برنامه ها آگهی پیدا کنید و طبق این کدها دستوراتی را برای هوشمند سازی بیشتر فایل Batch خود اضافه کنید. تا مثلا در صورت بروز هر گونه خطا در عملکرد برنامه، دستور و یا برنامه مکمل اجرا شود و مشکلات پیش آمده را برطرف سازد.

در واقع شما میتوانید با استفاده از کدهای برگشتی عملکرد برنامه خود را حدس بزنید و اقداماتی را برای هوشمند سازی بیشتر فایل Batch خود انجام دهید.

زمانیکه یک دستور به درستی و با موفقیت اجرا میشود کد برگشتی آن عدد صفر است ولی در صورتی که عملکرد آن با مشکل مواجه شود کد برگشتی آن عددی غیر از صفر میباشد. یعنی عدد صفر بیانگر صحت عملکرد برنامه ها است. در فهرست زیر مجموعه از کدهای برگشتی را به همراه توضیحات آنها مشاهده میکنید:

کد برگشتیتوضیحات
0اجرای موفقیت آمیز برنامه، یعنی برنامه به درستی و با موفقیت اجرا شده است.
1عملکرد غلط، زمانیکه سعی میشود یک برنامه اجرا شود اما آن برنامه در CMD تشخیص داده نمیشود.
2زمانیکه فایل مشخص شده پیدا نشود. یعنی فایل مشخص شده در آدرس مذکور وجود نداشته است.
3زمانیکه مسیر مشخص شده پیدا نشود. یعنی مسیر مشخص شده پیدا نشده است.
5ممنوعیت در دسترسی (Access Denied) یعنی کاربر مجوز کافی برای اجرای برنامه را ندارد.
9009 0x2331برنامه ذکر شده به عنوان یک دستور داخلی و یا خارجی تشخیص داده نشده است. یعنی برنامه و یا دستور که مشخص شده، نام و یا مسیر آن به درستی نوشته نشده است.
22122525495 0xc0000017 -1073741801به اندازی کافی RAM مجازی وجود ندارد. یعنی کل فضای حافظه RAM ویندوز پر شده است.
3221225786 0xc000013A -1073741510برنامه توسط کلیدهای Ctrl+C متوقف شده است. نشان میدهد کاربر برنامه را یا با کلیدهای Ctrl+C بسته است یا با کلید های Ctrl+Break یا اینکه کلا پنجره Command Prompt را بسته است.
3221225794 0xc0000142 -1073741502برنامه نتوانست به درستی مقدار دهی اولیه را انجام دهد. یعنی برنامه ای که اجرا شده یا کاربر مجوز کافی برای اجرای آنرا نداشته یا gdi32.dll و user32.dll نتوانسته اند به درستی مقدار دهی اولیه داشته باشند.
کدهای برگشتی در بچ اسکریپت

استفاده از کدهای برگشتی در Batch File

همانطور که در فصل قبل هم گفته شد برای بررسی عملکرد برنامه ها با کد های برگشتی هم میتوانید از Variable مخصوص این عمل یعنی %ERRORLEVEL% استفاده کنید هم میتوانید دستور IF را به همراه عنصر ERRORLEVEL استفاده کنید. Variable یا متغیر %ERRORLEVEL% شامل آخرین کد برگشتی از برنامه یا Script اجرا شده میباشد. اکثر دستورات خط فرمان مثل Echo و IF و Set مقدار موجود %ERRORLEVEL% را به خاطر میسپارند تا شما بتوانید از کد برگشتی آن برای خطا یابی از دستور اجرا شده استفاده کنید.

نکته: برای دریافت اطلاعات بیشتر در مورد Variable ها به فصل دوم یعنی استفاده از Variable ها در فایل Batch مراجعه کنید.

همانطور که در فصل قبل هم به آن اشاره نمودم مرسوم ترین تکنیک برای بررسی عملکرد برنامه ها و دریافت کدهای برگشتی استفاده از Compare-OP یا اپراتور NEQ در دستور IF میباشد. به مثال زیر توجه کنید:

Program.exe
 IF %ERRORLEVEL% NEQ 0 (
     Echo Do Something Here to Address the Error
 ) 

در دستور بالا گفته شده اگر کد برگشتی برنامه Program.exe برابر با عدد 0 نبود پیام Do Something Here to Address the Error با دستور Echo نمایش داده شود.

یکی دیگر از راههای که میتوان صحت عملکرد برنامه قبلی را بررسی نمود استفاده از عنصر ERRORLEVEL با دستور IF میباشد. برای مثال:

Program.exe
 IF ERRORLEVEL 1
     Echo Do Something Here to Address the Error
 ) 

استفاده کردن از روش بالا برای اشکال زدایی از برنامه ها و دستورات صحیح است اما مشکلی هم در آن وجود دارد، آنهم منظور از IF ERRORLEVEL 1 فقط عدد 1 نیست بلکه عدد یک به بالا است یعنی اگر کد برگشتی با عدد 1 و 2 و 3 و … برابر بود باید دستور مشخص شده اجرا شود. بهترین روش برای بررسی و اشکال زدایی از برنامه ها و دستورات استفاده از متغیر %ERRORLEVEL% میباشد. تا دقیقا فقط کد برگشتی مشخص شده تطابق داده شود.

برای بررسی نمودن یک کد برگشتی خاص باید آن را با اپراتور EQU یا NEQ وارد کنید. مثلا میتوانید یک برنامه یا Script را اجرا کنید و کد خروجی 9009 را با اپراتور EQU بررسی کنید.

Program.exe
 IF %ERRORLEVEL% EQU 9009 (
                                        ECHO Error – Program.exe Not Found in Your Path
 ) 

در دستور بالا گفته شده اگر برنامه Program.exe با کد 9009 مواجه شد پیام Program.exe Not Found In Your Path را نمایش بده.

اجرای شرطی دستورات با استفاده از علامت های || و &&

همانطور که تا اینجا متوجه شدید به سادگی میتوان با استفاده از دستور IF طبق کد برگشتی مشخص شده برنامه یا دستور خاصی را اجرا نمود. یکی دیگر از راههای که میتوان طبق کد برگشتی دستورات یا برنامه ها را اجرا کرد استفاده از علامت ها میباشد.

مثلا شما میتوانید با استفاده از دو علامت && پشت سر هم از صحت عملکرد یک برنامه مطمئن شوید و طبق آن یک برنامه یا دستور دیگر را اجرا کنید. برای اینکار کافیست بعد از دستور دوبار علامت && را پشت سر هم تایپ کنید سپس دستور مور نظر خود را پس از آن وارد کنید. برای مثال:

Program.exe && Echo Your Program Work Successfully

به صورت کلی از علامت & برای اجرای چند دستور در یک Line استفاده میشود. ولی در بالا از دو علامت && پشت سر هم استفاده شده که به معنای بررسی صحت عملکرد دستور قبل و اجرای دستور بعد میباشد. در صورتی که برنامه Program.exe بدون مشکل اجرا شود دستور Echo اجرا شده و پیام ذکر شده را نمایش میدهد. در غیر این صورت عملی انجام نخواهد شد. در واقع دو علامت && بیانگر این موضوع است که اگر کد برگشتی برنامه قبل برابر با عدد 0 بود دستور مشخص شده اجرا شود.

پس متوجه شدید برای اجرای شرطی یک برنامه در صورت صحت عملکرد برنامه قبل، میتوان از دو علامت && استفاده نمود اما برای اجرای شرطی یک برنامه در صورت مواجه شدن برنامه قبل با خطا باید از دو علامت || استفاده کنید. برای مثال:

Program.exe || Echo Program.exe Failed with Return Code %ERRORLEVEL%

در دستور بالا گفته شده اگر برنامه Program.exe با خطا مواجه شد پیغام Program.exe Failed with Return Code %ERRORLEVEL% نمایش داده شود.

یکی از روشهای ساده برای جلوگیری از خطا استفاده از دستور Exit به همراه پارامتر /B میباشد. (این دستور برای خروج از فایل Batch مورد استفاده قرار میگیرید نه اجرای عادی CMD)  پس از پارامتر /B باید کد مشخص کننده خطا را درج کنید. برای مثال:

Program.exe || Exit /B 1

اگر بخواهم یک روش دیگر همانند تکنیک بالا را برایتان توضیح دهم استفاده از دستور goto به همراه برچسب :EOF میباشد. EOF از سه کلمه End Of File تشکیل شده و باعث خروج یا بسته شدن فایل Batch میشود. به مثال توجه کنید:

Program.exe || GOTO :EOF

به طور کلی از روشهای بالا برای جلوگیری از خطا در فایل Batch استفاده میکنند.

4 پاسخ به “کدهای برگشتی در بچ اسکریپت”

  1. Avatar photo M@hdi گفت:

    سلام میشه ایراداین دستور رو بگی بهم
    @echo off
    Title Welcom To Simple Mover
    Color a

    set /p pt = %Cd%
    echo %pt%

    pause
    هر کاری میکنم خروجی ECHO is On میده در حالی که سورس کد میگه همش مسیر داعم داشته باشه ینی مسیر جاری رو ریختم تو یه متغیر بعد اونو چاپ کردم بعد اینکه اینتر میزنم میاد بیرون
    ممنون 🙂

    • سلام مهدی جان
      چند تا اشباه داشتی
      1- بعد از دستور set از پارامتر /p استفاده کرده بودی که برای وارد کردن محتوای Variable به صورت دستی استفاده میشه (مثلا ساخت منو)
      2- بعد از نام Variable و علامت مساوی و محتوای Variable فاصله اضافی گذاشتی
      نسخه ویرایش شده فایل Batch شما:

      @ECHO OFF
      Title Welcome to the Mover
      Color a
      set pt=%Cd%
      echo %pt%
      pause

  2. Avatar photo M@hdi گفت:

    بعد من وقتی میخام یه فایلو انتقال بدم با سی ام دی مسیر فایل اولو میزارم تو یه متغغیر مسیر درایوی که میخام فایل بره را هم میزارم تو یه متغییر دیگه بعد تو دستور به جای نوشتن ادرس میدم ولی ارور میده میشه راهنمایی کنی ممنون

    • مسیر های که مشخص میکنید رو باید در بین علامت (“”) Quotation Mark قرار بدید تا در صورت وجو نام های چند کلمه ای قعطی در بین آدرسهای مشخص شده به وجود نیاد.
      برای اینکه بتونم اطلاعات بیشتری رو بدم باید محتوای فایل batch رو ببینم 🙂
      موفق باشید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *