ساخت حلقه در فایل Batch

ساخت حلقه در فایل Batch با استفاده از دستور for

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

با استفاده از دستور FOR میتوانید یک عمل خاص را روی بیش از چند صد هزار فایل (بدون محدودیت) انجام دهید. دستور FOR که به عمل Loop هم معروف است به شما کمک میکند تا از نوشتن دستورات متعدد جلوگیری کنید. و کلیه کارهای خود را در یک دستور خلاصه کنید.

دستور FOR به شکل زیر نوشته میشود:

for {%variable|%%variable} in (set) do command [ CommandLineOptions]

برای استفاده از دستور FOR در حالت عادی Command Prompt باید از یک % در کنار Variable استفاده کنید. اما اگر میخواهید در فایل Batch از دستور FOR استفاده کنید باید از دو %% در کنار Variable استفاده کنید. استفاده از حروف بزرگ و کوچک در Variable با هم متفاوت است.

SET بخشی است که باید در آن یک یا چند فایل و پوشه و یا محدوده از مقدار ها را باید مشخص کنید. فایلها و پوشه های مشخص شده در بخش SET توسط دستور (Command) مورد پردازش قرار میگیرند.

Command همان دستوری است که میخواهید روی بخش SET تاثیر بگذارد.

Command Line Option پارامتر های که میخواهید از دستور مشخص شده در بخش Command مورد استفاده قرار بگیرند را باید مشخص کنید.

به مثال دستور FOR توجه کنید:

FOR %I IN (%USERPROFILE%\*) DO @ECHO %I

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

FOR %I IN (%HOMEPATH%\DESKTOP\*.JPG) DO COPY %I F:\SHIFT\

نکته: علامت \* مشخص کننده کلیه فایلهای موجود در پوشه مشخص شده قبل از این علامت میباشد.

در دستور بالا گفته شده تمام فایلها با پسوند *.JPG را از پوشه Desktop به آدرس F:\SHIFT\ کپی کند.

اگر بخواهم فرایند بالا را به زبان ساده بیان کنم: ابتدا دستور FOR یک Variable با نام %I درست میکند که محتوای آن در بخش SET مشخص شده است. این محتوا شامل فایلهای JPG در آدرس %HOMEPATH%\DESKTOP میباشند. سپس با DO میگوید دستور Copy داده های دریافت شده از Variable یا متغیر %I را به آدرس F:\SHIFT\ کپی کند.

حال اگر بخواهید همین فرایند بالا را روی پوشه ها انجام دهید. باید از پارامتر /D بعد از دستور For استفاده کنید. به مثال زیر توجه کنید:

FOR /D %I IN (%TEMP%\*) DO ECHO %I

دستور بالا کلیه پوشه های موجود در آدرس %TEMP% را توسط دستور ECHO به نمایش میگزارد.

برای بررسی نمودن یک درایو از پوشه Root باید از پارامتر /R استفاده کنید.

FOR /R D: %I IN (.) DO ECHO %I

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

FOR /R D: %I IN (.,*) DO ECHO %I

برای چرخش بین مقدار های تکراری باید از پارامتر /l بعد از دستور for استفاده کنید. فرایند به این صورت است در پرانتز SET باید ابتدا مقدار شروع را مشخص کنید سپس مقدار کاهش یا افزایش را مشخص کنید در آخر مقدار پایانی را مشخص کنید. به مثال زیر توجه کنید:

FOR /L %G IN (1,1,10) DO ECHO %G

دستور بالا به ترتیب از عدد 1 تا عدد 10 را پشت سر هم با دستور ECHO نمایش میدهد.

همچنین میتوانید شمارش را به صورت عکس انجام دهید. به مثال زیر توجه کنید:

FOR /L %G IN (10,-1,0) DO ECHO %G

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


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


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

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

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

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

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

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

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

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

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


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

محمد برغمدی

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

10 دیدگاه روی “ساخت حلقه در فایل Batch

  • دسامبر 15, 2016 در 06:50
    Permalink

    با حوصله توضیح دادین و برای شروع کار بسیار خوب …

    خیلی ممنون و خسته نباشید… خدا قوت 🙂

    پاسخ
  • دسامبر 31, 2016 در 20:14
    Permalink

    سلام
    مشکلم حل شد
    علمتون افزون… 🙂

    پاسخ
  • فوریه 27, 2017 در 19:18
    Permalink

    ضمن سلام وتشکر
    چندتا سوال داشتم که ممنون میشم جواب دقیقی بفرمایید:
    1-
    Bathfile میخوام که بتونه یک ستاپ یا برنامه که بصورت exe و فرم هستش(یعنی گزینه هایی مثل listbox-Radio button-Button-textbox-browserfile وازاین قبیل مسائل ،داره)رو باز کنه و این فرم رو اتوماتیک گزینه هایی که ما مد نظرمون هستش به شکل پیش فرض انتخاب و اجرا کنه.(یعنی فلان رادیو باتن -چک باکس و فایل و … و در آخر روی دکمه تایید بزنه)!!؟؟
    2-Bathfile یی که بتونه خودش زبان فارسی رو اضافه -و لوکیشن و فورمت رو بزاره روی ایران/persianو time zone رو روی تهران تنظیم کنه؟
    3-Bathfile یی که بتونه تاریخ رو روی لاتیبن تنظیم و زمان رو به ایران تنطیم کنه؟
    تشکر

    پاسخ
    • محمد برغمدی
      مارس 1, 2017 در 23:17
      Permalink

      سلام، خواهش میکنم دوست عزیز
      برای نصب خودکار برنامه ها از طریق CMD و Batch که بهش نصب خاموش هم گفته میشه میتونید از پارامتر /s یا /silent استفاده کنید اما برنامه مورد نظر شما باید این ویژگی رو داشته باشه، برای نصب شخصی سازی شده هم باید 100% فایل Setup به صورت msi باشه
      برای تنظیم زبان توسط Batch File باید فایل xml زبان رو داشته باشید بعد با دستور control intl.cpl,, /f:”%CD%\AddKeyboardLanguage.xml” زبان رو اضافه کنید.
      برای تغییر زبان و Time zone هم باید از دستور Control.exe TIMEDATE.CPL,,/Z Central America Standard Time استفاده کنید.

      پاسخ
  • می 2, 2017 در 11:55
    Permalink

    با سلام ممنون از توضیحاتون
    ببخشید من میخواهم در for
    FOR %%i IN (“%file%”) DO (

    ECHO fontname=%%~ni
    ECHO fileextension=%%~xi
    ECHO fontfile=%%~ni%%~xi
    set outDir=C:\Users\S.R.P\Desktop\ouput\%%~ni\
    ECHO %outDir

    )
    انجام بدهم.اما در cmd میزنه echo is off (برای قسمت set)
    میشه راهنمایی کنید کجای برنامه مشکل داره؟ (ممنون میشم ایمیل کنید)

    پاسخ
    • محمد برغمدی
      می 2, 2017 در 18:33
      Permalink

      سلام ، خواهش میکنم
      مشکل از دستور Set نیست بلکه بخاطر استفاده نکردن از دستور Setlocal EnableDelayedExpansion به همراه قرار ندادن نام Variable در بین دو علامت تعجب !! بجای دو علامت درصد %% است.
      تو کتاب آموزش گام به گام Batch Script در فصل دومش کاملا درباره استفاده از متغیر های که هنوز تفسیر نشده اند توضیح دادم.
      نحوه درست نوشتن فایل Batch هم به این شکل میشه:
      @echo off
      setlocal enabledelayedexpansion
      FOR %%i IN (“%file%”) DO (
      ECHO fontname=%%~ni
      ECHO fileextension=%%~xi
      ECHO fontfile=%%~ni%%~xi
      set “outDir=C:\Users\S.R.P\Desktop\ouput\%%~ni\”
      ECHO !outDir!
      )

      پاسخ
  • سپتامبر 10, 2017 در 09:12
    Permalink

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

    پاسخ
    • محمد برغمدی
      سپتامبر 10, 2017 در 10:30
      Permalink

      سلام علیرضا جان، ممنونم از لطف تون
      برای پیدا کردن فایلها بر اساس تاریخ باید از دستور dir به همراه پارامتر /od استفاده کنید. برای مثال:
      dir /a /b /o-d c:
      در دستور بالا با پارامتر /o-d گفته شده باید فایلها بر اساس تاریخ ساخت به ترتیب به نمایش در بیان
      همین دستور رو باید در دستور for /f قرار بدید و آخرین نتیجه رو با دستور set یک متغیر کنید و در دستور بعد اون متغیر رو به نمایش بذارید. برای مثال:
      for /f “tokens=*” %i in (‘dir /a /b /o-d c:’) do set lastfileis=%i
      echo %lastfileis%
      موفق و سربلند باشید.

      پاسخ

پاسخ دهید

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