پاسخ : دستورات فایلهای Batch
سلام
نقل قول:
ادواردوی عزیز:
1. در پست شماره 8 عرض کردم:
__ یک فایل Batch باید دارای پسوند bat باشد ولی اگر در ویندوز بجای پسوند bat از پسوند cmd استفاده کنید ، فایل
Batch بهتر و سریعتر کار خواهد کرد.
منظورم همينه که چرا با توجه به سرعت بالا در خوندن واجراي cmd فرمت bat هم در ويندوز وجود داره؟! آيا وجودش ضروريه يا نيازي هست؟
نقل قول:
بهر حال یک راه برای مشاهده دستورت بالا این است که وارد خط فرمان ویندوز شده و سپس دستور بالا را با مختصر
تفاوت زیر وارد کرده و سپس کلید Enter را فشار دهید:
کد:
for %A in (1 2 3 4 5 6 7 8 9 10 ) do echo %A
عکس ذيل:
http://www.filedoon.ir/upload/ia2y_commandprompt1.png
اينم عکسش:
http://www.filedoon.ir/upload/l5h6_commandprompt2.png
نقل قول:
راه دیگر این است که یک فایل Batch با دستور زیر اجرا کنید که پس از اجرا خواهید دید فایلی بنام aaa.txt در کنار فایل Batch ساخته
شده که در داخلش اعداد 1 تا 10 نوشته شده است:
کد:
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A >>aaa.txt
متاسفانه توليد نشد!
سپاس
پاسخ : دستورات فایلهای Batch
ادواردوی عزیز:
فایل با پسوند Batch از ویندوز های اولیه بوده و الان فقط بخاطر سازگاری در سیستم موجود است. فرضا" اگر یک ویندوز 3.1 در
ماشین مجازی نصب کنی نیاز خواهی داشت که از آن استفاده کنی. و یا همینطور اگر بهر علتی مثلا" اجرای بازی های قدیمی
در ماشین مجازی سیستم عامل DOS نصب کنی نیازش داری.
اما علت اینکه دستور آخری (for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A >>aaa.txt ) در سیستم شما اجرا نشده
همانطور که قبلا" کفتم این است که عاملی در سیستم شما از اجرای دستورات Batch جلوگیری میکند.
در تصویر زیر نشان میدهد که در اول فایل شما یک کاراکتری قبل از علامت @ هست که نباید باشد و همین مسئله هست
که باعث عدم اجرای فایل میشود.
http://www.worldup.ir/images/nsq7j9vtf9gnmstc971.png
در ضمن با دیدن تصویر بالا من به این نتیجه میرسم که شما فایل Batch را در Notepad با نوع UTF-8 ذخیره کرده اید که
توانسته اید علامت غیر قابل اجرا با Batch را تایپ و ذخیره کنید.
http://www.worldup.ir/images/25zhvgdohijmlq4vfwo8.png
اگر نتوانستی مسئله را حل کنی ، لطفا" فایل خودت (eDvArDo.cmd ) را برایم آپلود کن.
من نمیدانم چرا در سیستم شما فایل های Batch اجرا نمیشوند سعی میکنم علت را جستجو کرده و اگر پیدا کنم اطلاع خواهم
داد.
پاسخ : دستورات فایلهای Batch
در مثال جلسه قبلی یک فایل Batch با محتوای (for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A ) را اجرا کردیم و دیدیم
که با اجرای آن اعداد 1 تا 10 بترتیب زیر هم نوشته شدند.
ما در مثال بالا با استفاده از دستور ( echo %%A ) خواستیم که در تیجه اجرای فرمان موجودی های داخل متغیر A نشان داده شوند.
ولی اجباری نداریم که این دستور را فقط برای نشان دادن تعدادی عدد استفاده کنیم.
برای مثال محتوای فایل Batch بالا را با دستورات زیر عوض کرده و سپس اجرا کنید:
@echo off
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do notepad
خواهید دید که با اجرای آن ، اول برنامه Notepad اجرا خواهد شد. حالا برنامه Notepad را ببندید ، خواهید دید که مجددا"
برنامه Notepad اجرا خواهد شد (برای بار دوم ). حال اگر دوباره برنامه Notepad را ببندید برای بار سوم اجرا خواهد شد.
و همینطور الی آخر . یعنی برنامه Notepad به تعداد 10 بار (به تعداد موجودی داخل پرانتز) اجرا خواهد شد.
در کل منظورم از این مثال مسخره این است که دستور for کاری را به تعداد موجودی داخل پرانتز تکرار میکند. در مثال
جلسه قبل گفته بودیم که ده بار موجودی داخل متغیر A را نشان دهد و در این جا گفتیم برنامه Notepad را اجرا کند.
منظور اصلی بنده از گفتن این نکات این است که دستورات وظایف مشخصی دارند ولی این هوش و استعداد کاربر است
که میتواند از این دستورات کار های متفاوت بکشد.
امروز در تهران باد بسیار شدید و وحشتناکی بمدت چند ساعت وجود داشت که طبق معمول برق کل منطه ما و حداقل چند منطقه
اطرافمان قطع شد
و بعد از پایان یافتن طوفان ،
ساعت ها طول کشید تا برق وصل شود و لذا دسترسی به کامپیوتر نداشتم که مطالب بیشتری بنویسم
تا بعد اگر عمری باشد ، طوفانی نباشد و برق داشته باشیم
1 فایل پیوست
پاسخ : دستورات فایلهای Batch
سلام
استاد عزيز، متن اون فايل عين دستوريه که شما گذاشتيد، آخه کپي پيست کردم!
پيوست شد
نقل قول:
برای مثال محتوای فایل Batch بالا را با دستورات زیر عوض کرده و سپس اجرا کنید:
@echo off
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do notepad
خواهید دید که با اجرای آن ، اول برنامه Notepad اجرا خواهد شد. حالا برنامه Notepad را ببندید ، خواهید دید که مجددا"
برنامه Notepad اجرا خواهد شد (برای بار دوم ). حال اگر دوباره برنامه Notepad را ببندید برای بار سوم اجرا خواهد شد.
و همینطور الی آخر . یعنی برنامه Notepad به تعداد 10 بار (به تعداد موجودی داخل پرانتز) اجرا خواهد شد.
اين يکي هم اجرا نشد!!!
ميدونم ايراد از سيستم منه، راستي استاد اين دستورات توي همه ويندوزها يه جوره و قابل اجراست؟
سپاس
1 فایل پیوست
پاسخ : دستورات فایلهای Batch
ادواردوی عزیز
فایل های شما در سیستم بنده هم اجرا نمیشوند. ولی:
حالا این فایل پیوست را هم اجرا و نتیجه را اعلام کن
پاسخ : دستورات فایلهای Batch
سلام
عجيبه! همون دستوره ولي فايلي که شما پيوست کرديد، اجرا شد! :tajob::blink2::fkr::naboodam::ghati:
چرا؟!
سپاس
پاسخ : دستورات فایلهای Batch
ادواردوی عزیز
فکر میکنم که شما برنامه Notepad خود را بطریقی تنظیم کرده اید که فایل ها را بصورت Unicode ذخیره میکند
ولی فایل های Batch را بهتر است نوع ANSI ذخیره نمائید.
من در فایل پیوست بالا که همان فایل شماست همین کار را انجام دادم.
پاسخ : دستورات فایلهای Batch
بد ندیدم که یک مثال دیگر در رابطه با دستوری که مطالعه کردیم را داشته باشیم.
فایل Batch با محتوای زیر را اجرا کنید:
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do md C:\ABC\%%A
بعد از اجرای مثال بالا اگر به درایو C وارد شوید خواهید دید که در آن جا پوشه ای بنام ABC درست شده و در داخل آن
تعداد 10 عدد پوشه دیگر با نام های 1 تا 10 درست شده اند.
اگر توضیحات بنده را درست متوجه شده باشید مطمئنا" علت را میدانید.
=======================
در جلسات قبل با یک نوع از موارد استفاده از دستور FOR آشنا شدیم.امروز یک چیدمان بهتر و قویتر را مطالعه میکنیم.
باز هم مثال قبلی را در نظر میگیریم ولی این بار با امکاناتی بیشتر.
در مثال ( for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A ) میتوانستیم کاری کنیم که دستور FOR اعداد 1 تا 10
را نشان دهد.
حالا در نظر بگیرید که میخواهیم بجای اعداد 1 تا 10 اعداد بیشتری مثلا" 1 تا 100 و یا 1 تا 1000 را نشان دهیم.
انجام اینکار با دستور قبلی تقریبا" نشدنی است. حداقل اشکال این است که ما باید دو ساعت وقت بگذاریم و در یک
سطر در داخل پرانتز اعداد ا تا فرضا" 1000 را تایپ کنیم.
پس چکار باید کرد؟
دستور FOR چیدمانی دارد که این کار را بسیار آسان میکند حتی اگر اعدادی خیلی بزرگتر از 1000 داشته باشیم.
دستور زیر را اجرا کنید:
کد:
@echo off
FOR /L %%A IN (1,1,100) DO (
ECHO %%A
)
pause >nul
با اجرای دستور بالا اعداد 1 تا 100 بترتیب زیر هم نمایش داده خواهند شد.
حال ببینیم دستور چگونه کار میکند.
ما در مثال بالا دو تغییر کلی نسبت به مثال قبلی داریم. اول اینکه این بار دستور FOR را همراه سویچ L/ استفاده
کرده ایم و دوم اینکه داخل پرانتز یک نوع دیگر نوشته شده است.
این دستور اعمال زیر را انجام میدهد:
1. دستور FOR به اولین عدد داخل پرانتز نگاه کرده و مقدار آن را در داخل متغیر A ذخیره میکند. و سپس به قسمت
بعد از عبارت DO رفته و دستور موجود در آن جا را انجام میدهد. که در این زمان عدد 1 در مانیتور نوشته میشود.
2. حالا دستور FOR دو باره به اول بر میگردد. ایندفعه اول ، به موجودی داخل متغیر A نگاه میکند که ببیند چقدر است
(در این مثال 1 است). حال این مقدار (یعنی عدد 1 ) را با دومین عدد داخل پرانتز (که در این مثال 1 است ) جمع میکند.
که 1 + 1 برابر 2 میشود.
سپس مقایسه میکند که ببیند آیا مجموع این دو عدد ( یعنی عدد 2 ) نسبت به سومین عدد داخل پرانتز ( یعنی عدد 100
در این مثال ) ، چه حالتی دارد.
اگر ببیند این عدد از سومین عدد داخل پرانتز کمتر است دو باره به قسمت بعد از عبارت DO رفته و دستور موجود در آن
جا را انجام میدهد. که در این زمان ما عدد 2 (یعنی 1 + 1 ) را در مانیتور خواهیم دید.
3. و همینگونه دستور FOR دو باره به اول بر گشته و عملی را که در بالا انجام داد را تکرار میکند تا زمانیکه مقدار مجموع
عدد داخل متغیر با دومین عدد داخل پرانتز کمتر از مقدار سومین عدد داخل پرانتز باشد و زمانی تکرار را قطع میکند که
موجودی گفته شده بیشتر از مقدار عدد سوم داخل پرانتز باشد..
بیائید مطلب را به نوع دیگری تعریف کنیم:
__ در این نوع دستور اول اولین عدد داخل پرانتز به عنوان عدد شروع استفاده میشود. یعنی اولین عدد موجود در داخل
پرانتز عدد start نامیده می شود. اگر ما در مثال بالا در داخل پرانتز اولین عدد را بجای 1 عدد دیگری مثلا" 4 بنویسیم
برنامه در خروجی اعداد 4 تا 100 را نشان خواهد داد.
__ دومین عدد داخل پرانتز عددی هست که برنامه هر بار آن عدد را به عدد موجود در متغیر اضافه خواهد کرد. این عدد
را عدد step میگویند. ما اگر در مثال بالا ، عدد دوم داخل پرانتز را بجای عدد 1 عدد دیگری مثلا" 3 بگذاریم برنامه در انتها
اعداد 1 ، 4 ، 7 ، 10 و... را نشان خواهد داد یعنی هر عدد نسبت به عدد قبلی بمقدار 3 عدد بیشتر خواهد بود.
__ دستور FOR ، دستورات نوشته شده در بعد از عبارت عبارت DO را تا زمانیکه مجموع داخل متغیر و دومین عدد داخل
پرانتز ، کمتر از سومین عدد داخل پرانتز باشد ، ادامه خواهد داد.
به مثال زیر گاه کنید:
کد:
@echo off
FOR /L %%A IN (10,2,100) DO (
ECHO %%A
)
pause >nul
با اجرای این مثال قاعدتا" برابر شرحی که داده شد باید اعداد 10 ، 12 ،16،14 ، 18 ....100 نشان داده شوند
=========================
من ساده ترین موارد استفاده از دستور FOR را توضیح دادم
این دستور موارد استعمال فراوان دیگری هم دارد که در موردشان صحبت نکردیم.
تا این جا من سعی کردم که شما را با مقدمات فایل های Batch آشنا کنم ولی دیگر سن و حوصله ام توان ادامه این
مبحث را نمیدهند لذا حالا که مقدمات را فهمیدید بقیه راه به همت خودتان بستگی دارد.
موفق باشید.
پاسخ : دستورات فایلهای Batch
سلام
نقل قول:
سپس مقایسه میکند که ببیند آیا مجموع این دو عدد ( یعنی عدد 2 ) نسبت به سومین عدد داخل پرانتز ( یعنی عدد 10
در این مثال ) ، چه حالتی دارد.
فکر ميکنم منظورتون همون عدد 100 بوده که درست تايپ نشده.
حالا:
1- استاد عزيز، اگه نمايش اعداد برعکس باشه، يعني از 100 به 1 با گامهاي 2تايي اونوقت دستور چطور نوشته ميشه؟
ميدونم که اعداد اول و سوم (آغازين و پاياني) جاشون عوض ميشه ولي با چه سوييچي ويا به چه عبارت و دستوري "کنترل کم شدن" (گامهاي کاهشي) انجام ميگيره؟
2- درضمن اگه بخواهيم نمايش اعداد "مابين" اعداد آغازين تا پاياني انجام بگيره، دستور چطور ميشه؟
3- نمايش اعداد اگه بجاي ستوني، پشتسر هم و سطري بشه (مثلاً با دو فضاي خالي)، دستور چطور خواهد بود؟
سپاس
پاسخ : دستورات فایلهای Batch
با دستور زیر اعداد مابین 100 تا 10 بطور معکوس وبصورت (100 ، 98 ، 96 و....) نشان داده خواهند شد در اینجا در داخل پرانتز
عدد شروع 100 انتخاب شده لذا از عدد 100 شروع میکند ، عدد Step -2 انتخاب شده یعنی در هر دور باید دو تا کم شود:
کد:
@echo off
FOR /L %%A IN (100,-2,10) DO (
ECHO %%A
)
pause >nul