دستور FOR دستوری است که به شما امکان می دهد چندین بار دستورات را "حلقه" یا تکرار کنید. این بسیار شبیه به عبارت FOR ارائه شده در چندین زبان برنامه نویسی است. دستور FOR اغلب در فایل های دسته ای استفاده می شود، اما می توان آن را مستقیماً در خط فرمان نیز استفاده کرد.
برای یادآوری، شکل کلی حلقه FOR به صورت زیر است:
FOR %variable IN (set) DO command [command-parameters]
در جایی که متغیر یک حرف واحد است، (set) مجموعه ای از یک یا چند فایل را مشخص می کند، command دستور خط فرمان است که برای هر فایل در مجموعه اجرا می شود، و command-parameters اختیاری است. پارامترهایی که باید به "فرمان" منتقل شوند.
بنابراین فرض کنید چندین فایل COM.dll به شما داده شده است که باید آنها را در رجیستری ویندوز ثبت کنید. می توانید همه آنها را در یک پوشه قرار دهید و سپس می توانید دستور زیر را از داخل آن پوشه اجرا کنید:
C:DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i
کاری که این کار انجام می دهد، برای هر فایل .dll که در فهرست فعلی پیدا می کند، اجرای برنامه regsvr32 بر روی آن است. (سوئیچ "/s" به سادگی به regsvr32 می گوید که کار خود را بی صدا انجام دهد.) متغیر مورد استفاده ("%i") به حروف بزرگ و کوچک حساس است و مقدار هر فایل .dll را به نوبه خود فرض می کند. سپس نام فایل .dll با استفاده از همان متغیر "%i" به برنامه regsvr32 ارسال می شود.
یک نوع از حلقه عمومی FOR از سوئیچ /L استفاده می کند و این شکل کلی را دارد:
FOR /L %variable IN (start,step,end) DO command [command-parameters]
این یک حلقه را اجرا می کند که در آن %variable ابتدا روی start تنظیم می شود و با step افزایش می یابد تا زمانی که به مقدار end برسد. (این استفاده باید برای برنامه نویسان بسیار آشنا باشد.) بنابراین فرض کنید باید لیست اعداد 1 تا 5 را نمایش دهید. می توانید این کار را به این صورت انجام دهید:
C:> FOR /L %i IN (1,1,5) DO @echo %i
نوع دیگری از حلقه FOR از سوئیچ /D استفاده می کند و این شکل کلی دارد:
FOR /D %variable IN (set) DO command [command-parameters]
با این نوع، اگر «set» حاوی حروف عام باشد، فرمان به جای نام فایل روی نام دایرکتوری ها کار می کند. برای مثال، اگر میخواهید مجموعهای از فایلها را از درخت دایرکتوری کپی کنید و همه فایلها را در یک فهرست قرار دهید، مفید خواهد بود.
به عنوان مثال، من یک دایرکتوری به نام Temp دارم. این شامل زیر شاخه هایی به نام های TempTemp2 و TempBarry است. دایرکتوری های TempBarry و TempTemp2 حاوی فایل هایی هستند که می خواهم کپی کنم. اگر میخواستم همه فایلها (بدون ساختار دایرکتوری) را در درخت Temp در پوشهای به نام Files کپی کنم، میتوانم این کار را به صورت زیر انجام دهم:
C:Temp> FOR /D %i IN (*) DO Copy %i*.* Files
آنچه را که فکر میکنم باطنیترین شکل حلقه FOR است، تا انتها گذاشتهام. به نظر می رسد که استفاده از سوئیچ /F به شما امکان می دهد تقریباً هر کاری را انجام دهید - اگر فقط بتوانید نحوه استفاده از آن را بیابید. شکل کلی این است:
FOR /F "options" %variable IN (`command`) DO command [command-parameters]
(با عرض پوزش همه در یک خط قرار نمی گیرند.) چندین "گزینه" وجود دارد که می توانید از آنها استفاده کنید، و اولین "فرمان" (فرمانی که با آپوستروف های عقب احاطه شده است) می تواند هر دستور خط فرمان باشد. بنابراین در اینجا یک مثال از نحوه استفاده از این وجود دارد:
FOR /F "Usebackq Delims==" %i IN (`dir/b c: empa*.tmp`) DO @echo c: emp\%i | Findstr /f:/ "a b c"
(با عرض پوزش همه در یک خط قرار نمی گیرند.) این دستور دستور DIR/B را در C:TempA*.tmp انجام می دهد. برای هر فایلی که پیدا میکند، نام فایل را تکرار میکند و آن را به فرمان Findstr هدایت میکند، که تمام خطوط حاوی "a"، "b" یا "c" را جستجو میکند. کار بسیار عجیبی است که باید انجام دهید، اما حداقل نشان می دهد که چگونه می توانید از /F استفاده کنید. پیشنهاد می کنم برای /؟ برای به دست آوردن یک لیست کامل از همه گزینه ها، و سپس شما اساساً فقط با تخیل خود در مورد نحوه استفاده از آن مقید هستید.
همچنین می توانید از دستور FOR در یک فایل دسته ای استفاده کنید. تنها چیزی که متفاوت است این است که شما علائم %- را دو برابر می کنید، در حالی که در خط فرمان فقط از یک علامت %- استفاده می کنید. به عنوان مثال، اگر نمونه دوم بالا در یک فایل دسته ای قرار می گرفت، به شکل زیر خواهد بود:
FOR /L %%i IN (1,1,5) DO @echo %%i