آموزش ساخت فایل Batch

آموزش ساخت فایل Batch دستور IF

همانند زبانهای برنامه نویسی، Batch Programing هم دارای دستوراتی برای هوشمند سازی فعالیت ها در فایل Batch میباشد. مثلا زمانیکه میخواهید کار یا وظیفه خاصی را در فایل Batch انجام دهید. میتوانید مشخص کنید اگر اتفاق X افتاد عمل 1 را انجام بده در غیر این صورت عمل 2 را انجام بده. در واقع از دستور IF برای اجرای شرطی برنامه ها در فایلهای Batch استفاده میشود.

دستور IF را میتوان برای سه هدف مختلف استفاده نمود:

یک: برای بررسی از صحت عملکرد برنامه ها یا Script های قبلی (ERRORLEVEL).

IF [NOT] ERRORLEVEL number command

دو: برای مقایسه از همسان بودن دو رشته (String) مختلف (String).

IF [NOT] string1==string2 command

سه: برای بررسی از وجود داشتن یا نداشتن فایلها و پوشه ها (EXIST).

IF [NOT] EXIST filename command

در بخش بالا مثال های از دستور IF را به همراه نمونه ای از دستورات آن مشاهده میکنید.

  1. از کلمه NOT برای معکوس نمودن بررسی دستور IF استفاده میشود.
  2. از Variable یا متغیر ERRORLEVEL برای بررسی کد برگشتی دستور قبل استفاده میشود.
  3. بجای Number باید از کد برگشتی مناسب استفاده کنید.
  4. بجای Command باید دستور مورد نظر خود را وارد کنید.
  5. رشته یا String1 در واقع یک مقدار برای بررسی و مقایسه آن با String2 میباشد.
  6. از کلمه Exist برای بررسی از وجود فایلها و پوشه ها استفاده میشود.

بررسی عملکرد برنامه قبلی

همانطور که گفتم برای بررسی از صحت عملکرد برنامه های اجرا شده، باید از Variable یا متغیر ERRORLEVEL استفاده کنید. برای مثال:

@ECHO OFF

Ping 4.2.2.4

IF ERRORLEVEL 0 ECHO Your Ping Was Successful

Pause

در دستور بالا گفته شده اگر کار برنامه Ping به درستی انجام شود. پیام Your Ping Was Successful را نمایش بده.

دستور IF دارای پنج Compare-op یا Operator برای بررسی هوشمندانه تر کد ها میباشد. استفاده از Compare-op به شما اجازه میدهد اعداد بالاتر و پایین تر کد ها را نیز بررسی کنید. در ادامه اسم این Compare-op ها را مشاهده میکنید:

EQU – Equal

NEQ – Not Equal

LSS – Less Than

LEQ – Less Than or Equal

GTR – Greater Than

معنای Compare-op های بالا از قرار (EQU یعنی مساوی است با) – (NEQ یعنی مساوی نیست با) – (LSS یعنی کمتر است از) – (LEQ یعنی کمتر یا مساوی است با) – (GTR یعنی بزرگتر است از) میباشد.

برای استفاده از Operator های بالا یا همان Compare-op ها باید نحوه استفاده از دستور به این شکل میشود:

Ping 4.2.2.4

IF %ERRORLEVEL% NEQ 0 (

    ECHO Operation Failed

)

Pause

در دستور بالا گفته شده اگر کد برگشتی با عدد 0 مساوی نبود پیام Operation Failed را نمایش بده.

مقایسه دو Strings با یکدیگر

برای مقایسه دو String با یکدیگر باید از دو علامت == در بین String ها استفاده کنید. به مثال زیر توجه کنید.

@ECHO OFF

IF %TMP% == C:\Users\Home\AppData\Local\Temp Echo Both String Are Same

در دستور بالا گفته شده اگر %TMP% با آدرس C:\Users\Home\AppData\Local\Temp یکی بود پیام Both String Are Same را نمایش بده.

بررسی از وجود داشتن یا نداشتن فایل

برای بررسی از وجود یک فایل یا پوشه در هارد دیسک باید از کلمه Exist استفاده کنید. برای مثال

IF EXIST %TMP% ECHO Temporary Folder Was Found

همانطور که میدانید %tmp% مشخص کننده پوشه Temp در آدرس C:\Users\AccountName\AppData\Local\Temp میباشد. اگر بخواهیم به صورت جزئی نگاه کنیم، دستور if exist به معنای “اگر وجود داشت” است سپس مقصود if exist با کلمه %tmp% مشخص شده. در آخر هم دستور echo برای نمایش پیغام Temporary Folder Was Found استفاده شده. به زبان ساده در دستور بالا گفته شده اگر پوشه %tmp% وجود داشت پیغام Temporary Folder Was Found را نمایش دهد.

به مثال معکوس شده دستور IF با کلمه NOT توجه کنید:

IF NOT EXIST %TMP% ECHO Temporary Folder Not Found

در مثال بالا بجای if exist از if not exist استفاده شده که به معنای “اگر وجود نداشت” میباشد (متضاد دستور if exist) سپس از کلمه %tmp% به عنوان مقصود if not exist استفاده شده و در آخر هم از دستور echo برای نمایش پیام Temporary Folder Not Found استفاده شده. پس به طور کلی کار دستور بالا برای بررسی کردن پوشه %tmp% میباشد. تا در صورت عدم وجود %tmp% پیغام Temporary Folder Not Found را نمایش دهد.

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


برای دریافت نسخه PDF مقاله های سایت ابتدا در سایت ثبت نام کنید تا بتوانید به کلیه مقالات به صورت کاملا رایگان دسترسی پیدا کنید. ورود به سایت | ثبت نام در سایت


آموزش مبتدی تا حرفه ای ساخت فایل Batch

فصل اول: مبانی پایه Batch Programming

فصل دوم: کدهای برگشتی یا فایل Batch یا Return Code

فصل سوم: ورودی ها و خروجی های STDIN , STDOUT , STDERR

فصل چهارم: معرفی و ساخت Variable ها با دستور SET

فصل پنجم: اجرای شرطی برنامه ها با دستور IF

فصل ششم: ساخت منو در فایل Batch (با استفاده از دستور IF و SET)

فصل هفتم: دستور FOR برای ساخت حلقه

فصل هشتم: نکات تکمیلی در ساخت فایل Batch (بررسی کلی)


به نظر شما ممکنه کسی با استفاده از کلید های زیر این مطلب رو به اشتراک بذاره؟
محمد برغمدی

محمد برغمدی

امام علی علیه السلام: با مردم آنگونه معاشرت كنيد، كه اگر مرديد بر شما اشك ريزند، و اگر زنده مانديد، با اشتياق سوي شما آيند.

31 دیدگاه روی “آموزش ساخت فایل Batch

  • مهر 21, 1395 در 10:58
    Permalink

    خیلی ممنون کامل بود بطوریکه نیازم رفع شد در این زمینه

    پاسخ
  • آذر 18, 1395 در 16:33
    Permalink

    سلام.میخام برنامه ای بنویسم که چک کنه اگر macid برنامه برابر مک ایدی سیستم بود ی فایل اکسل اماده رو برامون باز کنه در غیر اینصورت از برنامه خارج بشه.میتونین کمک کنید؟

    پاسخ
    • محمد برغمدی
      آذر 18, 1395 در 19:40
      Permalink

      سلام
      اگر منظورتون رو درست متوجه شده باشم شما همچین چیزی میخواهید:
      IF %MACADDRESS%==11:11:11:11:11:11 START EXCELFILE

      پاسخ
  • آذر 22, 1395 در 14:38
    Permalink

    سلام ممنون که پاسخ دادین.من به جای 1 ها مک ایدی سیستمم رو وارد کردم و به جای EXCELFILE ادرس فایل اکسل به همراه نام و پسوند ولی موقع اجرا فقط از برنامه خارج میشه؟؟!!!
    IF %MACADDRESS%==MACID SYSTEMAM START d:\bank11.xlsx
    میشه بگین ایراد برنامه ام کجاست؟ممنونم

    پاسخ
    • محمد برغمدی
      آذر 22, 1395 در 16:18
      Permalink

      سلام خواهش میکنم
      کلا چند تا اشتباه داشتید:
      1- کلمه SYSTEMAM چیه؟ باید از DO برای اجرای دستور مورد نظر تون استفاده کنید.
      2- قبل از این دستور باید از دستور for برای پیدا کردن MAC Address های سیستم تون استفاده کنید.

      @ECHO OFF
      TITLE COMPARE MAC ADDRESS
      COLOR 0A
      FOR /F “USEBACKQ TOKENS=2 DELIMS=:” %%A IN (`IPCONFIG /ALL ^| FIND /I “PHYSICAL ADDRESS”`) DO (
      @ECHO %%A >>MACLIST
      )
      TYPE MACLIST | FIND “11-11-11-11-11-11” && START CALC
      DEL MACLIST >NUL

      پاسخ
      • آذر 22, 1395 در 16:49
        Permalink

        MACID SYSTEMAM منظورم اینه که مک ایدی سیستم خودم رو نوشتم.

        پاسخ
      • آذر 22, 1395 در 16:52
        Permalink

        همین برنامه رو کپی پبست کردم و ادرس مک ایدی سیستم خودم رو نوشتم ولی بازم فقط از برنامه خارج میشه!!!!

        پاسخ
        • محمد برغمدی
          آذر 22, 1395 در 18:04
          Permalink

          اگر متن برنامه رو از سایت کپی پیست کنید تو فایل text برنامه اجرا نمیشه چون علامت های Quotation Mark رو صحیح کپی نمیکه پس باید اول علامت های Quotation Mark (“”) رو حذف کنید و به صورت دستی تایپشون (“”) کنید.

          پاسخ
    • محمد برغمدی
      آذر 22, 1395 در 16:21
      Permalink

      کلا میتونید از اسکریپت بالا استفاده کنید فقط باید بجای مک آدرس 11-11-11-11-11-11 مک آدرس مورد نظر خودتون رو جایگزین کنید.

      پاسخ
      • آذر 22, 1395 در 16:48
        Permalink

        برنامه رو میشه توضیح بدین؟ MACID برنامه برابر MACID سیستم بود باید ی فایل اکسل رو باز کنه اونو کجا تعریف کنم؟؟؟

        پاسخ
        • آذر 22, 1395 در 17:36
          Permalink

          بجای CALC که برنامه ماشین حساب رو باز میکنه ادرس فایل اکسل رو میدم ولی بازم اجرا نمیشه.حتی خود CALC هم اجرا نمیشه.”:(

          پاسخ
          • محمد برغمدی
            آذر 22, 1395 در 17:55
            Permalink

            برنامه ای که براتون ارسال کردم اول همه MAC ADDRESS های سیستم رو بررسی میکنه و از اونها یک فهرست با نام MACLIST تهیه میکنه بعد اگه MAC ADDRESS شما را از فهرست پیدا کرد با دستور START برنامه مورد نظر شما را اجرا میکنه
            فایل متنی برنامه رو با فرمت .TXT براتون ارسال مینکم خودتون بررسی کنید باید بخش MAC ADDRESS و آدرس برنامه EXCEL رو عوض کنید. اگر باز هم نتونستید انجام بدید مسیر نصب برنامه EXCEL رو به همراه MAC ADDRESS مورد نظرتون رو بگید تا برنامه رو شخصی سازی کنم.
            لینک برنامه: http://files.tml-manager.ir/dl/MAC.zip

  • آذر 22, 1395 در 18:13
    Permalink

    بی نهایت از لطفتون ممنونم.فقط ی سوال دیگه با اجازتون:
    برنامه اجرا شد صفحه cmd مک ایدی رو نشون میده و باز میمونه همزمان فایل اکسل رو هم باز میکنه.چجوری میتونم ویرایشش کنم که اگه فایل اکسل رو باز کرد دیگه صفحه cmd بسته بشه.ممنونم

    پاسخ
  • آذر 23, 1395 در 09:46
    Permalink

    با سلام
    دوتا سوال دیگه برام مطرح شد که به اجازه تون میپرسم:
    1- دستور pause رو حذف کردم ولی وقتی فایل اکسل باز میشه صفحه cmd همچنان مک ادرس رو نشون میده و باز میمونه.دستوری که صفحه cmd همزمان با باز شدن اکسل بسته بشه چیه؟با دستور IF میشه؟ اگه میشه چجوری؟
    2- چجوری میتونه به جای یک مک ایدی چندین مک ایدی رو چک کنه؟ یعنی روی چندین سیستم قابل اجرا باشه.

    پاسخ
    • محمد برغمدی
      آذر 23, 1395 در 10:12
      Permalink

      سلام
      دستور CALL رو با دستور START عوض کن تا بعد از اجرای فایل EXCEL برنامه به کار خودش ادامه بده و متوقف نشه
      برای اینکه بتونید چند تا سیستم رو اضافه کنید باید خط مربوط به دستور TYPE MACLIST رو به صورت کامل چند بار کپی پیست کنید و MAC ADDRESS های مرود نظرتون رو جایگزین کنید.
      در ضمن به زودی کتاب آموزش BATCH PROGRAMMING رو هم روی سایت قرار میدم.

      پاسخ
      • آذر 23, 1395 در 10:29
        Permalink

        عالی بود ممنون
        منتظر کتاب اموزشیتون هستیم.
        موفق باشین.

        پاسخ
  • آذر 23, 1395 در 16:42
    Permalink

    سلام.من خیلی معذرت میخام که انقد سوال میکنم ولی
    من ی فایل اکسل دارم میخام
    1- کاربرانم دسترسی مستقیم بهش نداشته باشن.
    2-روی هر سیستم اجرا نشه فقط رو سیستم هایی که مک ایدیشون رو تعریف میکنم اجرا بشه
    3-یک برنامه ی دیگه بره اون رو باز کنه
    با برنامه ای که قبلا با کمکتون نوشتیم نمیشه.راه حلی برام دارین؟
    ممنون

    پاسخ
  • محمد برغمدی
    آذر 23, 1395 در 19:37
    Permalink

    سلام خواهش میکنم عیبی نداره
    پس در کل یک برنامه ای لازم دارید که فایل excel شما رو طبق MAC Address های که براش تعریف کردید فراخوانی کنه درسته؟
    بهترین حالت اینکه این برنامه رو با C# بنویسید ولی نیاز داره شما زبان C# رو یاد داشته باشید.
    با همین Batch Programming هم میتونید اینکار رو انجام بدید فقط باید به درستی قواعدش رو رعایت کنید.
    مشکل برنامه ای که براتون ارسال کردم چی بود؟ با چه خطایی مواجه میشید یا چطور برنامه رو اجرا میکنید؟

    پاسخ
    • آذر 24, 1395 در 08:52
      Permalink

      سلام.وقت بخیر
      درسته برنامه ای هم ک الان با کمک شما نوشتیم همین کار رو میکنه فقط مشکل اینجاست که فایل اکسل رو باید همراه برنامه به کاربران ارائه بدم تا برنامه اجرا بشه.
      با سی شارپ هم بلدم برنامه اشو ولی فایل نباید exe باشه.

      پاسخ
      • محمد برغمدی
        آذر 24, 1395 در 15:50
        Permalink

        سلام
        فکر نمیکنم بتونی بدون استفاده از فایل EXE کاری از پیش ببری
        تو بهترین حالت باید با InstallShield یک فایل نصبی درست کنی که توش فایل Excel رو به صورتی مخفی سیستمی دربیاره و در یکی از پوشه های اصلی ویندوز کپی کنه و از فایل Bat یک Shortcut بزاری روی Desktop و از فایل bat فایل Excel رو فراخوانی کنی

        پاسخ
    • آذر 24, 1395 در 09:01
      Permalink

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

      پاسخ
  • اردیبهشت 9, 1396 در 13:29
    Permalink

    سلام و خسته نباشید
    میخواستم یه کمکی بکنید
    تعداد بسیار زیادی فایلهای اسکن شده با پسوند JPG دارم که به روش زیر نام گذاری شده اند
    عدد_عدد_عدد_حروف انگلیسی
    که همه در یک فولدر هستند برای مرتب سازی میخواستم برنامه ای بنویسم که بیاید عدد آخر نام هر عکس را بخواند و فولدری با آن نام بسازد و تمامی عکسهای با این سبک را در آن فولدر کپی کند و سپس در هریک از فولدرها هم با توجه به عدد اولی در نام هر عکس باز فولدری بسازد و همه عکسهایی با این سبک را در فولد مربوطه کپی کند و در نهایت نام هر یک از عکسها را به عدد دوم موجود در نام آنها تغییر دهد.
    یعنی اگر نام عکسی
    2017_165_91_e
    است. آن را در فولدر 2017 و در داخل ان فولدر نیز فولدر 91 را ساخته و آن عکس را با تغییر نام به 165 در این فولدر کپی کند.
    و این اتفاق برای همه عکسها بیفتد.
    با عرض پوزش از طولانی شدن سوال

    پاسخ
    • محمد برغمدی
      اردیبهشت 10, 1396 در 12:18
      Permalink

      سلام عرفان جان
      باید از دستور for به همراه دستور set برای ساخت چنین برنامه ای درست کنید.
      اول با دستور for نام کلیه فایلها رو دریافت کنید سپس با دستور set از هر فایل چهار تا Variable درست کنید که این Variable ها شامل نام خود فایل و چهار حرف اول نام فایل و سه حرف دوم نام فایل و دو حرف دوم نام فایل هستند
      در آخر با دستور if باید به صورت شرطی پوشه ها رو درست کنید و فایلها رو به پوشه ها انتقال بدید.
      کار خیلی سختی نیست ولی اگر دوست داشته باشید میتونم براتون کامل بسازمش، اما از مشکلات احتمالی اینکه نباید تعداد کاراکتر های هر Variable از انچه که ما مشخص میکنیم بیشتر بشه
      مثلا اگر اسم فایل شما 2017_165_91_e باشه همه فایلهای شما باید با همین تعداد کاراکتر باشن مثل:
      2016_135_92_ffasd یا 2017_265_11_fas و …

      پاسخ
      • اردیبهشت 10, 1396 در 15:02
        Permalink

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

        پاسخ
  • اردیبهشت 17, 1396 در 15:35
    Permalink

    با سلام و ضمن تشکر از سایت خوبتان
    میخواستم بدانم چطور میتوان با دستور if کاری کرد که اگر مثلا عبارت GLPAYU8HT0J29F در یک فایل با پسوند تکست txt موجود باشد انگاه بیاید چندتا دستور را انجام بدهد مثلا فلان فایل را از پوشه فلان پاک کند و یک فایل دیگر را در جای دیگر کپی کند و همینطور چند دستور دیگر را انجام دهد
    و اگر هم عبارت GLPAYU8HT0J29F در ان فایل تکست موجود نبود انگاه مثلا بنویسد ان عبارت موجود نیست
    ممنون میشم راهنماییم کنید

    پاسخ
    • محمد برغمدی
      اردیبهشت 18, 1396 در 03:13
      Permalink

      سلام، سلامت باشید، ممنونم از لطف تون
      شما میتونید از چندین روش اینکار رو انجام بدید. مثلا با استفاده از ترکیب دستورات type و findstr و استفاده از علامت های && برای اجرای شرطی دستورات مورد نظر تون، برای مثال:
      type C:\Windows\mytext.txt | find “GLPAYU8HT0J29F” && goto :subrutine
      در دستور بالا گفته شده اگر متن GLPAYU8HT0J29F در فایل mytext.txt پیدا شد با دستور goto وارد بخش subrutine شو و دستورات بخش subrutine رو اجرا کن اما در غیر اینصورت ادامه دستورات رو اجرا کن، که میتونید در بخش subroutin دستورات مورد نظر تون رو وارد کنید و در ادامه هم دستور echo GLPAYU8HT0J29F not found رو بزارید.
      و یا اینکه بجای goto :subrutin از دستور set استفاده کنید و یک Variable بسازید سپس با دستور if متغیر رو بررسی کنید و در صورتی که متغیر وجود داشت دستورات مورد نظر شما انجام بشن در غیر اینصورت پیغام که گفتید به نمایش در بیاد.
      یا اینکه میتونید از دستور for /f برای تجزیه فایل متنی مورد نظر تون استفاده کنید.
      باز هم اگر احساس کردید نمیتونید برنامه رو درست کنید از بخش تماس با ما سایت نیازتون رو ارسال کنید تا اسکریپت رو براتون آماده کنم.
      تمامی این مسائل رو هم در کتاب آموزش گام به گام Batch Script توضیح دادم که میتونید تهیه کنید.
      موفق و پیروز باشید.

      پاسخ
  • تیر 31, 1396 در 18:29
    Permalink

    سلام روز بخیر
    اردستانی هستم و یه مشکلی داشتم ممنون میشم پاسخ بدید
    من میخوام برنامه ای داشته باشم ک روی فلش بریزم (ترجیحا batch file) که بلافاصله بعد از اتصال فلش به دستگاه کامپیوتر شروع به کار کنه
    در این برنامه قصد دارم پورت usb که فلش به اون متصل هست مسدود و بسته بشه و در ادامه شناسه سی پی یو سیستم چک بشه. اگر شناسه سی پی یو جزو شناسه های معتبری که ما در یک فایل نوت پد جداگانه تعریف کردیم بود، پورت متصل به فلش باز بشه و بصورت عادی بشه از فلش استفاده کرد. در غیر این صورت اون پورت تا زمان اتصال فلش همچنان بسته باقی بمونه و بعد از جدا کردن فلش مجددا باز شه
    ممنون میشم در این مورد بهم کمک کنید یا اگر کسی توانایی نوشتنشو داره بهم اطلاع بدید تا انجامش بدیم

    پاسخ

پاسخ دهید

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