برنامهنویسی فایل Batch برای ویندوز — یک راهنمای مقدماتی و جامع
همه ما روزهایی داشتهایم که انجام وظایف اجباری باعث شده احساس بیهودگی میکنیم. وظایف ساده تکراری باعث تحلیل رفتن نیروی حیات ما میشود. میتوانیم با بیمیلی این وظایف را انجام دهیم یا آنها را نادیده بگیریم تا روزی دیگر به مشکل بزرگتری تبدیل شوند. در هر صورت این وضعیت قابلپذیرش نیست.
در رایانههای ویندوزی میتوانید برنامههای ساده کوچکی بنویسد که فایلهای Batch نامیده میشوند و زحمت انجام این کارهای زمانبر را بر عهده این برنامهها بگذارید.
این همان هدف اتوماسیون است تا کارهای تکراری را به برنامههای رایانهای بسپارید و دیگر نگران هیچ چیزی نباشید. در ادامه نگاهی به بخشهایی از فایل Batch و شیوه ایجاد برخی میانبرها برای کارهایتان میاندازیم.
فایل Batch چیست؟
در دوران پیش از ویندوز همه کارها به عوض جابجایی ماوس و کلیک، با تایپ کردن دستوراتی در خط فرمان انجام می شدند. سیستم عامل خاص مایکروسافت Ms-DOS، «سیستم کاربری دیسک مایکروسافت» (Microsoft Disk Operating System) نام داشت و دستورات آن نیز به نام دستورات داس (DOS) شناخته می شدند.
گاهی اوقات وظایفی وجود داشتند که در آن تنها کاری که باید انجام دهید، این بود که دستوراتی را با ترتیب تکراری وارد نمایید. در چنین مورادی میتوانستید یک فایل از این دستورات ایجاد کرده و نام آن را هر چیزی مانند BORING_TASKS.BAT تعیین کنید. سپس با وارد کردن عبارت «BORING_TASKS.BAT» و زدن دکمه اینتر فهرستی از دستوراتی که وارد کردهاید اجرا میشدند.
با این که در ویندوز از رابط گرافیکی استفاده میشود؛ اما مایکروسافت برای انجام کارها در پس زمینه همچنان به این فایلهای Batch نیاز دارد. آنها به دلیل ارائه رابط گرافیکی مجبور بودند امکان اجرای این فایلها را کنار بگذارند. اما این توانایی را برای افراد مختلف فراهم کردند تا فایلهای Batch خود را ساخته و اجرا کنند.
فایلهای Batch غالباً به عنوان ابزاری برای کاربران حرفهای و مدیران سیستم تصور میشود. اما دلیلی وجود دارد که کاربران مبتدی و متوسط نیز از آنها استفاده نکنند. در ادامه برخی کارهایی که میتوانید با این ابزار مهم اجرا کنید را توضیح میدهیم.
چگونه یک فایل Batch بسازیم؟
برای این بخش تنها چیزی که لازم داریم برنامه نُتپد (Notepad) ویندوز، فهرستی از دستورهای Batch و زمان و صبر کافی است. نتپد را باز کنید، دستوراتی که میخواهید را تایپ کنید و سپس فایل را ذخیره نمایید؛ اما نوع ذخیرهسازی (Save as type:) را به صورت «All Files» تعیین کنید و پسوند فایل را به صورت.bat بنویسید. این امر واقعاً مهم است. اینک یک فایل Batch دارید که هر زمان خواستید میتوانید آن را مورد استفاده قرار دهید.
اگر بخواهید تغییراتی در یک فایل Batch ایجاد کنید، بر روی آن راست کلیک کرده و گزینه Edit را انتخاب کنید. بدین ترتیب نت پد باز میشود و میتوانید آن را ویرایش کنید. در ادامه برخی از کارهایی را که میتوانید با استفاده از فایلهای Batch انجام دهید، ارائه کردهایم.
محدودسازی زمان استفاده از رایانه با یک فایل Batch
امکان «امنیت خانواده ویندوز» (Windows Family Safety) از نسخه 7 این سیستم عامل معرفی شده است و میتواند وظیفه محدودسازی زمان استفاده از رایانه را به خوبی مدیریت کند. اما ممکن است بخواهید رایانه خود را طوری پیکربندی کنید که صرفنظر از این که چه کسی وارد سیستم شده است، تا پیش از خاموشی سیستم، تنها زمان محدودی برای استفاده از آن داشته باشد. همچنین ممکن است بخواهید از رایانه خود برای استریم کردن رادیو استفاده کنید؛ اما پس از مدتی مشخص پس از ترک سیستم، به طور خودکار خاموش شود. برای این کار میتوان یک فایل Batch نوشت:
@echo off shutdown -s -t 3600
دستور @echo off به سیستم اعلام میکند که در زمان اجرای فایل Batch، پس از این دستور هیچ چیزی را در پنجره دستورات نشان ندهد.
دستور shutdown کاملاً مشخص است؛ اما شاید وظیفه پارامترهای –s و –t چندان مشخص نباشند. پارامتر –s به رایانه میگوید که سیستم را عملاً خاموش کند و خروج از حساب کاربری (-l) یا شروع مجدد (-r) نکند. پارامتر –t برای این دستور یک تایمر تعیین میکند.
زمانی که فایل Batch به کار افتاد، سیستم شروع به شمارش ثانیهها میکند. در این مثال تایمر به مدت یک ثانیه که 3600 ثانیه است، فعال خواهد بود. زمانی که زمان به 3600 ثانیه رسید، رایانه خاموش میشود. این مقدار را میتوانید به هر زمانی که دوست دارید تغییر دهید.
اگر میخواهید تعیین کنید که رایانه چه مدت پس از این که فرد مشخصی وارد سیستم شد روشن بماند، باید فایل shutdown.bat را در دایرکتوری Startup ذخیره کنید. در ویندوز 7 و نسخههای قبلتر این دایرکتوری در مسیر C:\Documents and Settings\All Users\Start Menu\Programs\Startup قرار دارد. در ویندوز 8 و 8.1 و همچنین 10، این دایرکتوری را در مسیر C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp میتوانید بیابید.
در این حالت زمانی که فردی وارد ویندوز میشود فایل Batch به طور خودکار اجرا میشود و تایمر شروع به شمارش میکند.
حذف همه فایلها در یک پوشه
اگر برنامهای داشته باشید که مقادیر زیادی فایلهای گزارش (log) در یک دایرکتوری مشخص ایجاد میکند، شاید حذف همه این فایلها به روش معمول، کاری زمانبر و آزار دهنده باشد. میتوان یک فایل Batch ایجاد کرد و همه فایلهای درون پوشه را بدون لحظهای فوت وقت حذف نمود. کد زیر بسیار ساده است و تنها یک پوشه خاص را خالی میکند.
cd C:\Folder\Subfolder del /f/q *
دستور cd به رایانه میگوید که دایرکتوری را به مسیر مشخص شده تغییر دهید. در این مثال از مسیر C:\Folder\Subfolder استفاده شده است. این دستور همه فایلهای درون این پوشه را حذف میکند. میتوان این مسیر را به هر پوشه دلخواه تغییر داد؛ اما ابتدا باید از پوشهای که میخواهید خالی کنید مطمئن شوید.
دستور del به معنی حذف (delete) فایلها است. پارامتر /f حذف فایلهای تنها خواندنی را الزام میکند و پارامتر /q اعلام میکند که این کار را بدون پرسش و پاسخ انجام دهد. بدین ترتیب هیچ یک از نامهای فایلهایی که حذف میشوند، در پنجره دستورات ویندوز ظاهر نخواهد شد. کاراکتر ستاره (*) اعلام میکند که همه فایلها باید حذف شوند. این حرف در واقع یک کاراکتر wildcard یا فرانویسه است. این کاراکترها به جای برخی کاراکترهای دیگر ظاهر میشوند و بدین ترتیب میتوان دستوراتی با انعطافپذیری بیشتر نوشت.
شما میتوانید فایلهایی که میخواهید حذف کنید را به طور دقیقتری تعیین کنید. برای مثال فرض کنید میخواهید فقط همه فایلهای متنی ساده را حذف کنید، زیرا این فایلهای گزارش هستند که فضای زیادی اشغال کردهاند. در این صورت به جای این که از کاراکتر ستاره در انتهای دستور del استفاده کنید، میتوانید از txt.* بهره بگیرید. این دستور به رایانه میگوید هر فایلی که پسوند txt. دارد را از دایرکتوری مربوطه پاک کند. در این حالت تنها این فایلها از دایرکتوری مربوطه حذف میشوند.
cd C:\Folder\SubfolderOne del /f/q *.txt
فرض کنید در این دایرکتوری فایلهای متنی خیلی زیادی وجود دارند و همه فایلهای log با فرمت log-dd-mm-yy نامگذاری شدهاند. برای این که بتوانید این فایلهای خاص را حذف کنید، میتوانید بین عبارتهای log و txt. یک علامت ستاره (*) قرار دهید تا تنها فایلهایی که بدین ترتیب نامگذاری شدهاند حذف شوند:
cd C:\Folder\SubfolderTwo del /f/q log*.txt
اگر میخواهید چندین پوشه را حذف کنید به سادگی کافی است یک بخش دیگر به فایل Batch خود اضافه کنید و در بخش جدید آدرس پوشه دیگر را وارد کنید. در این صورت فایل Batch شبیه کد زیر خواهد بود:
cd C:\Folder\SubfolderOne del /f/q log*.txt cd C:\Folder\SubfolderTwo del /f/q log*.txt
با کمی دستکاری فایل فوق میتوانید کارهای خلاقانه زیادی با آن انجام دهید. این فایلها را میتوان به صورت دستی اجرا کرد و یا از برنامه Windows Task Scheduler استفاده کرده و در طی زمانهای معینی این فایل را اجرا نمود. حتی میتوان این فایل را در زمان آغاز به کار رایانه به عنوان یک نسخه سبکتر از برنامههایی پاکسازی ویندوز مورد استفاده قرار داد.
انتخاب یک عدد تصادفی
در ادامه فایل Batch جالبی معرفی شده است که یک عدد تصادفی 4 رقمی تولید میکند. شاید از خود بپرسید در چه حالتی ممکن است به چنین امکانی نیاز داشته باشید. مواردی زیادی وجود دارند که در آنها باید یک عدد 4 رقمی وارد کنید، برای مثال رمز کارتبانکی یک عدد چهاررقمی است. ممکن است وظیفه مدیریت کاربران در یک کسبوکار با شما باشد و سیستم کنترل دسترسی از یک عدد 4 رقمی استفاده کند. در هر صورت اگر بخواهید صرفاً به ذهن خود اکتفا کنید در نهایت متوجه میشوید که هرگز نمیتوانید یک عدد تصادفی واقعی انتخاب کنید. اما فایل Batch زیر، زحمت این کار را برای شما میکشد.
@echo off :start set /a ran=%random% if %ran% GTR 9999 goto:start if %ran% LSS 1000 goto:start echo Batch chose the number: %ran% pause
دستور start: یک برچسب با نام Start میسازد که مانند یک نشانه استفاده میشود. هر زمان که دستور goto به این آدرس اشاره کند، رایانه به این نقطه باز میگردد و هر کدی که پس از این خط نوشته شده باشد را اجرا میکند.
دستور Set /a به رایانه اعلام میکند که باید یک متغیر جدید که عدد خواهد بود تعریف کند، پارامتر a/ تقاضا میکند این عدد تا نزدیکترین عدد کامل گرد شود. بنابراین برای مثال عدد 1234.6 به صورت 1234 گرد میشود.
نام این متغیر ran است. نام این متغیر را هر چیزی میتوان تعیین کرد؛ اما ran برای یک عدد تصادفی (random) نام با مسمایی است.
%random% یک متغیر دینامیک است که هر بار که رایانه به آن برسد، یک عدد جدید به آن انتساب میدهد. متغیر دینامیک %random% عددی بین 0 تا 32767 ایجاد میکند.
ما یک عدد 4 رقمی میخواهیم، بنابراین عدد مورد نظرمان باید بین 1000 تا 9999 باشد. دو خط بعدی کد این وظیفه را انجام میدهند.
If دستور ابتدایی یک عبارت شرطی و به معنی «اگر» است. Then نیز به معنی آنگاه است. بدین ترتیب با یک ساختار «اگر ... آنگاه... » مواجه هستیم. منطق قضیه به این صورت است که:
IF فلان شرط صحیح باشد، THEN بهمان کار را انجام بده.
خط اول میگوید که if عدد صحیح در متغیر ran بزرگتر از (GTR) 9999 بود، به نقطه Start برو و از نو آغاز کن. اگر مقدار ran کمتر از 9999 باشد رایانه به اجرای بقیه کد ادامه میدهد. در خط دوم مشخص شده است که اگر مقدار ran کمتر از 1000 بود به برچسب start برو و کد را مجدد اجرا کن. چندین اپراتور مختلف برای مقایسه اعداد در فایلهای Batch وجود دارند.
ممکن است فکر کنید عدد 0001 نیز یک عدد چهاررقمی است و البته حق با شماست. اما متغیر تصادفی %random% چنین عددی تولید نمیکند. این متغیر میتواند عدد منفرد 1 را ایجاد کند ولی 3 صفر ابتدایی را در جلوی آن قرار نمیدهد. بنابراین ما تنها محدود به 8999 عدد چهاررقمی هستیم. این تعداد برای منظور ما کاملاً کافی است.
در نهایت رایانه عددی را که بین 1000 تا 9999 قرار دارد در خروجی ارائه میکند. فرض کنید این متغیر عدد 4428 را ارائه کرده است. در این زمان فایل Batch از دستور echo برای نمایش جمله «Batch chose the number 4428» استفاده میکند. اینک یک عدد تصادفی 4 رقمی در اختیار داریم. این فرایند بسیار سریعتر از زمانی که صرف توضیح دادن آن کردیم عمل میکند و در کسری از ثانیه عدد مربوطه را نمایش میدهد.
Pause باعث میشود که پنجره دستورات تا زمانی که کلیدی را فشار ندادهاید، باز بماند. بدین ترتیب میتوانید عدد تصادفی که در خروجی نمایش یافته است را مشاهده و یا در صورت تمایل یادداشت کنید.
تغییر نام چند فایل با استفاده از فایل Batch
فایلهایی که توسط بیتتورنت دانلود میشوند، غالباً تعداد زیادی حروف اضافه در نام خود دارند. البته این مسئله به خودی خود اشکالی ندارد؛ اما حذف کردن موارد اضافی باعث میشود که ظاهر فایلها بهتر شود. برای مثال فرض کنید یک فایل کتاب الکترونیکی با نامی مانند BookName.UploaderGuy.PD.epub دانلود کردهاید که در اینجا BookName همان نام کتاب مربوطه است. میتوان با استفاده از فایل Batch زیر بخش.UploaderGuy.PD را از نام فایل جدا کند.
@echo off SETLOCAL ENABLEDELAYEDEXPANSION SET old=.UploaderGuy.PD SET new= for /f "tokens=*" %%f in ('dir /b *.epub') do ( SET newname=%%f SET newname=!newname:%old%=%new%! move "%%f" "!newname!")
این کد کارهای زیادی را انجام میدهد. برخی از این کارها بر اساس آنچه قبلاً در این نوشته مشاهده کردیم برایمان معنیدار هستند. بخشهای دیگر را نیز میتوانید با کمی دقت و تفکر متوجه شوید. بدین ترتیب بررسی کد فایل Batch فوق را به عنوان یک تمرین برای یادگیری هر چه بهتر کدنویسی فایلهای Batch در نظر بگیرید.
سخن پایانی
در این نوشته ماهیت فایل Batch، روشهای ابتدایی ایجاد یک چنین فایل و چند نمونه از انواع مفید آن را توضیح دادیم. نشان دادیم که چگونه میتوانید اطلاعات بیشتری در مورد بهرهگیری از فایلهای Batch به دست آورید. امیدواریم در این مسیر تجربه مفرحی داشته باشید.
در صورتی که این نوشته مورد توجه شما واقع شده است، پیشنهاد میکنیم موارد زیر را نیز مطالعه نمایید:
- آموزش نسخههای مختلف ویندوز
- تغییر نام و حذف دسته جمعی فایلها در ویندوز
- Timeline در ویندوز ۱۰ چیست و چه کاربردی دارد؟ – راهنمای جامع
- آموزش کاربردی خط فرمان ویندوز (Command Prompt یا CMD)
- دروس مهندسی کامپیوتر
==
سلام
من یه فولدر دارم که یه سری فایل داخلش هست. هر روز هم فایل داخلش اضافه میشه
حالا میخواستم یه دستور بنویسم که هر وقت اجراش کردم بیاد فایلهای توی این فولدر رو تک به تک بررسی کنه و فایلهایی که تاریخ ساخته شدنشون از 40 روز میگذره رو توی یه فولدر دیگه انتقال بده
ممنون میشم راهنمایی کنید
سلام دوست عزیز،
یک فایل نصب Batch دارم، همه بخشهای نرم افزار نصب می شود که من این را نمی خواهم بلکه یک قسمت از ان را می خواهم نصب کنم ولی نمیدانم چطوری Batch را تغییر دهم که همه بخشهای نرم افزار نصب نشود.
سلام وقت بخیر ببخشید می خواستم یه منبع اموزشی کامل به صورت ویدیو یا کتاب در مورد bath داشته باشم راهنمایی می کنید؟
سلام. سپاس جناب لطفی به خاطر اطلاعات مفیدتون…
جسارتا من می خواستم بدونم آیا چیزی که مدنظرم هست قابلیت اسکریپ نویسی داره؟
.
.
تصور کنید دو تا فولدر داریم: فولدر “الف” و فولدر “ب”
آنچه در فولدر “الف” موجود نیست، اما در فولدر “ب” موجود است حذف بشود
و هر آنچه در هر دو فولدر به صورت یکسان موجود است دست نخورده باقی بماند.
به عبارتی می خواهم دو فولدر با هم سینک و یک شکل شوند
سپاس جناب لطفی بزرگوار
مشکل حل شد…
سلام و وقت بخیر؛
برای انجام کاری که در نظر دارید، میتوانید دستور زیر را در یک بچ اسکریپت تنظیم کنید:
robocopy \Source \Destination /MIR /FFT /Z /XA:H /W:5
از توجه شما سپاسگزارم.
با سلام
با تشکر از سایت خوب فرادرس
در قسمت “انتخاب یک عدد تصادفی” دستور if به همراه پارامتر i آورده شده است (/i)
این پارامتر برای تفاوت نذاشتن بین حروف بزرگ و کوچک انگلیسی به کار می رود برای اعداد کاربردی ندارد
بچ اسکریپت تصحیح شده ی شما:
@echo off
:start
set/a ran=%ramdom%
if %ran% GTR 9999 (
goto :start
) else (
if %ran% LSS 1000 (
goto :start
) else (
echo ren = %ran%
pause
)
)
سلام و وقت بخیر دوست عزیز؛
موردی که در خصوص پارامتر i/ فرمودید، کاملاً صحیح است. کد به شیوهای اصلاح شد که کارکرد نمایش عدد تصادفی 4-رقمی را به درستی اجرا کند.
از توجه و لطف شما به فرادرس بسیار سپاسگزاریم و به داشتن چنین خوانندگانی افتخار میکنیم.