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

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

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

خلاصه اومدم شروع به تحقیق و نوشتن این اسکریپت کنم. چون خیلی کم با شل ویندوزهای جدید که فرمانهای جدید/توسعه یافته و پیشرفته تری دارن کار کرده بودم، نیاز به کمی سرچ و تحقیق و تست داشتم، ولی فکر میکردم کار باید نسبتا ساده باشه و نهایت در زمان کوتاهی (حداکثر نیم ساعت) بتونم شل اسکریپت مورد نظرم رو با موفقیت درست کنم. اما یک مقدار که تحقیق و تست کردم متوجه شدم که درست کردن چیزی که میخوام اونقدر هم ساده نیست و یک مقدار دردسر و نیاز حتمی به استفاده از یکسری ویژگیهای پیشرفته داره که قبلا باهاشون کار نکرده بودم. خلاصه بهرحال این شل اسکریپت رو با صرف وقت و انرژی بیشتری به اتمام و درحد قابل استفاده برای کاربرد مورد نظر خودم رسوندم.

فکر میکنم هرکس که با خط فرمان و اسکریپت نویسی ویندوز (یا حتی لینوکس) آشنا باشه با بررسی این شل اسکریپت که البته حجیم و پیچیده هم نیست (البته میگن معما چون حل شود آسان شود حکایت اینه)، میتونه کم و بیش راحت و سریع به طرز کارش بقدر کافی پی ببره که بعد بتونه برای کاربرد مورد نظر خودش اون رو تغییراتی بده و سفارشی و تنظیم بکنه برای خودش:

@ echo off
setlocal enabledelayedexpansion
set c=1
set a=0
FOR /F "delims=" %%i IN ('dir /b *.avi *.flv') DO (
ffmpeg -i "%%i" -q 1 !c!.wmv
del "%%i"
set /a c=c+1
)
pause
endlocal

این برنامه میاد و فایلهای با پسوند avi و flv رو که مستقیما در دایرکتوری جاری برنامه وجود دارن پیدا کرده و بعد یک خط فرمان برای برنامهء ffmpeg رو روی اونا اجرا میکنه که باعث تبدیل اونا به فرمت wmv میشه.

نکته و هشدار: هر فایل اولیه پس از تبدیل و ایجاد نسخهء جدید، توسط برنامه بصورت خودکار حذف میشه. در ضمن فایلهای جدید با اسم بصورت عددی 1‎.wmv و 2‎.wmv و الی آخر نامگذاری و ذخیره میشن (اگر فایلی با نام مشابه از قبل وجود داشته باشه Overwrite میشه). البته شما میتونید این موارد رو براحتی دستکاری کنید و تغییر بدید که برنامه اینطور بی مبالات عمل نکنه و درصورت خطای انسانی، برای فایلهای شما خطری نداشته باشه (شخصا نیاز جدی ای نداشتم که این کار رو بکنم).

فکر میکنم ممکنه بعضی افراد دیگر هم بعدا نیازهای مشابهی پیدا کنن و به دنبالش سرچ کنن و این شل اسکریپت بتونه براشون مفید باشه. منکه از این شکل اسکریپت تاحالا بقدر کافی استفاده کردم و اینقدری در وقت و انرژیم صرفه جویی کرده که اون وقت و انرژی ای رو که صرف تحقیق و درست کردنش شد کاملا جبران بکنه (علاوه بر سود افزوده ای که داشته). البته کلا زمان زیادی هم نبرد، ولی نیاز به مطالعه و تحقیق و تست بیشتری از اونچه که انتظار داشتم داشت.

یک هدفم از درج این مطلب این بود که بگم حتی خط فرمان و شل اسکریپت نویسی ویندوز هم میتونه خیلی وقتا مفید (یا حتی بعضی وقتا لازم) باشه و این فقط لینوکس نیست که درش خط فرمان و اسکریپت نویسی یک ویژگی استاندارد و مفید تلقی میشه. کاربری و برنامه نویسی خط فرمان، هم در ویندوز و هم در لینوکس میتونه خیلی مفید یا حتی لازم باشه و یک خوره و کاربر ابرقدرت باید بتونه از پس تمام اینا بربیاد و از این ابزارهای اساسی استفاده کنه و به موقع هرچیزی رو از نزدیکترین و ساده ترین و سریعترین راه حل انجام بده. البته اکثرا راه حلهای دیگری هم وجود دارن، اما باید توجه داشت که «ممکن بودن» یک چیزه و صرفه داشتن و انجام شدنش در زمان مناسب/نیاز یک چیز دیگه! مثلا من اگر میخواستم از راه برنامه نویسی دیگری این مسئله رو حل کنم یا توی اینترنت سرچ کنم و دنبال برنامه ای چیزی برای این کار بگردم، اون موقع حوصله و وقتش رو نداشتم و احتمالا بیخیال میشدم، ولی چون تونستم با خط فرمان که دم دست و نسبت به روشهای دیگر برای یک برنامه نویس راحت و سریع هست این کار رو انجام بدم، در کل و در نهایت به نفعم تموم شد.

من همیشه گفتم که قبول دارم که ضرب المثل «همه فن حریف هیچ کاره است» (مشابهش در زبان انگلیسی عبارت jack of everything master of nothing و عبارات مشابهی است) در خیلی موارد و حداقل از بعضی جهات صدق میکنه، ولی واقعا همه فن حریف بودن هم کاربردها و مزایای خودش رو داره و یک همه فن حریف میتونه چیزهایی رو به موقع بفهمه و کارهایی رو انجام بده که دیگران نمیتونن یا فرصت و صرفهء انجامش رو نخواهند داشت.یک خوبی همه فن حریف بودن اینه که بطور بالقوه اینطور افراد میتونن بینش و تصویر کلی کاملتر و دقیقتری از کل جهان داشته باشن. یعنی تمام واقعیت ها و روابطی که در جهان وجود دارن. مثلا بنده چندین بار با افرادی برخورد و بحث کردم که فقط با ویندوز و محصولات میکروسافت و بعضی شرکتهای تجاری و انحصاری دیگر کار کردن و از دنیای لینوکس و نرم افزارهای آزاد/بازمتن اطلاعات و تجربهء کافی ندارن، و دیدم که اینطور افراد چقدر دستاوردها و اهمیت و فواید و لزوم این مسائل رو نمیدونن و دست کم میگیرن و چقدر سطحی و اشتباه و ناقص و ناکارا درمورد کلیت واقعیت ها و سازوکار و روابط موجود در جهان و اکوسیستم پیچیده ای که داره فکر میکنن؛ این تفکرهای ناقص و اشتباه و سطحی در نهایت به نفع هیچکس نخواهد بود حتی خودشون یا حداقل بچه های خودشون!

موجودات خوره و همه فن حریف در دنیا نقش خاص و مهم خودشون رو دارن؛ باور کنید!

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

راستی درسته که بنده زیاد مینویسم، و مثلا برای همین مطلب ساده و کوچک چقدر وراجی کردم، ولی باور کنید پشتش یک دنیا دانسته و تحلیل بوده و چیزهایی که میگم شاید بنظر کم اهمیت و سطحی و بی ربط بیان، ولی در ذهن من اینطور نیست و تمام این دانسته ها و استنباط ها جزیی از یک مجموعهء عظیم دانش و تجربه و استنباط و ارتباطهای پیچیده و ظریف هستن که در عین حالی که خیلی از اونا ممکنه کم اهمیت بنظر بیان، اما در واقع اینطور نیست و همین چیزهای به ظاهر کوچک نقشهای مهم و حتی بعضیا اساسی در خیلی مسائل ایفا میکنن و بطور مستقیم و غیرمستقیم منجر به تغییرات بزرگ و مهمی در زندگی افراد و حتی جهان میشن. ولی خب حداکثر کارایی از اینها برای افراد درصورتی حاصل میشه که فرد همهء این دانشها و ارتباطها و مجموعهء اصول و واقعیت ها رو کسب کرده باشه و بتونه همزمان روابط و تعامل و تعادل میان همهء اونها رو ببینه و تحلیل و تصمیمگیری و استفاده کنه. باور کنید بخش بزرگی از کیفیت/بازدهی و مسیر زندگی ما در نهایت با مجموعهء همین دانسته ها و عملکردهای به ظاهر کوچک میتونه بصورت کاملا متفاوت و بهتری شکل بگیره.
ضعف انسانها در همین جزییات کوچک و ساده و به ظاهر کم اهمیت، ولی بنیادین، هست که خیلی وقتها در نهایت و درکل منجر به اشتباهات و خسارت های بزرگ میشه. ما باید خیلی زیاد بدونیم، خیلی دانا باشیم، و از کوچکترین جزییات و چیزهای به ظاهر بی اهمیت هم نباید براحتی رد شد، چون ممکنه ناآگاهی و دست کم گرفتن همونا آیندهء ما رو تغییر بده. باید تاجاییکه میشه سعی کنیم هیچ چیز ندانسته و حل نشده ای برامون باقی نمونه. تنها اینطوریه که میشه واقعا همه چیز رو فهمید و از پس همه چیز برآمد (تا حد امکان)، و ما به این، بیش از آنچه که خیلی ها تصور میکنن نیاز داریم! چراکه جهان واقعیت و رفتار آن با ما، مجموعه ای عظیم و پیچیده و ظریف حاصل از ترکیب همین اجزاء ریز و درشت است، و داشتن مطمئن نتیجهء نهایی و بهینه جز با دانستن و تحلیل و بحساب آوردن ارتباط و تعامل تمام این اجزاء ممکن نیست.

3 دیدگاه در “شل اسکریپت ویندوز برای اجرای یک خط فرمان بر روی فایلهایی با پسوند معین

  1. بازپینگ: علم خوره

  2. بازپینگ: علم خوره

پاسخ دهید

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

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>