[SIGPIC][/SIGPIC]
استاد در داخل پوشه scripts در کنار فایل setupcomplete.cmd حدود 6تا نرم افزار هستند که که توسط همین فایل setupcomplete.cmd اجرا میشوند وهمه سطرها ودستورات با DPO~% شروع میشوندو فایل setupcomplete.cmd اینطوری شروع میشه ایا با دستوری که شما دادید مشکلی ایجاد نمیشه
@ECHO OFF
Set WorkDir=%~dp0
-----------------------------------------------------------------------------------------------------------------------------------مسیر فایل setupcomplete.cmd
sources\$oem$\$$\Setup\Scripts
-----------------------------------------------------------------------------------------------------------------------------------
مسیر فایل Install.cmd
sources\$oem$\$$\Setup\XXX
نگران نباش.
[SIGPIC][/SIGPIC]
استاد در مورد اشکال مورد استفاده در فایلهای بچ توضیحاتی میدهید
استاد منظورم تقریبا اینا هست یا چیزاهای مشابه دیگه که تو بعضی فایلهای بچ هستند
=%~dp0
دستور Set
======
این دستور موارد استعمال مختلفی داشته و بسیار به درد بخور است که در این قسمت پاره ای از موارد مصرف این دستور
را یاد میگیریم.
1. فرض کنید که سه تا فایل بنام های AA.exe و BB.exe و CC.exe داخل پوشه C:\Windows\system32\XXX\YYY\ZZZ
قرار دارند و ما میخواهم این سه تا فایل را بترتیب توسط یک فایل Batch اجرا کنیم.
با مواردیکه تاکنون یاد گرفته ایم باید دستورات زیر را بنویسیم:
C:\Windows\system32\XXX\YYY\ZZZ\AA.exe
C:\Windows\system32\XXX\YYY\ZZZ\BB.exe
C:\Windows\system32\XXX\YYY\ZZZ\CC.exe
می بینید که هرچقدر تعداد فایل ها بیشتر باشند ، فایل Batch ما پیچیده تر شده و امکان اشتباه هم زیاد خواهد شد.
ولی با استفاده از دستور set میتوانیم دستور بالا را بصورت ساده و مفهوم زیر در بیاوریم:
می بینید که این فایل Batch نسبت به قبلی چقدر ساده تر و مفهوم تر شده است.ما در بالا در سطر اول با استفادهکد:set AA=C:\Windows\system32\XXX\YYY\ZZZ %AA%\AA.exe %AA%\BB.exe %AA%\CC.exe
از دستور set به برنامه گفته ایم که هر جا عبارت AA را ببیند آن را C:\Windows\system32\XXX\YYY\ZZZ در نظر
بگیرد
و بعد درسطور بعدی دیگر عبارت C:\Windows\system32\XXX\YYY\ZZZ را ننوشته و بجایش عبارت AA را نوشته ایم.
البته با این فرق که AA باید بین دو علامت %% نوشته شود.
عبارت AA را یک متغیر می نامند که در این مثال مقدارش برابر عبارت C:\Windows\system32\XXX\YYY\ZZZ است.
ما در ابتدای این فایل Batch یک متغیر یعنی AA و مقدار آن را مشخص کردیم. میتوانید بجای عبارت AA از عبارات دلخواه
خودتان استفاده کنید. میتوانید چندین متغیر را در اول فایل Batch معرفی کنید.
2. گاهی میخواهید فرضا" سوالی از کاربر پرسیده و بعد بر اساس جوابی که کاربر میدهد کار یا کار های بخصوصی را
انجام دهید.
در این جا میتوانید از دستور set بهمراه سویچ P/ استفاده نمائید. به مثال زیر توجه کنید:
بیائید یک برنامه بسیار ابتدائی را توسط فایل Batch طراحی کنیم.
فرض کنید که میخواهیم برنامه ای طراحی کنیم که اول منوئی به کاربر نشان داده و در آن به کاربر بگوید که یکی از
سه برنامه نشان داده شده ( در این مثال notepad ، MSPait و یا Calculator ) را انتخاب کند تا اجرا شود. و سپس
بسته به این که کاربر کدام برنامه را انتخاب کرده ، همان برنامه ، اجرا شود.
اول باید منوئی درست کرده و به کاربر نشان دهیم که کاربر بتواند بفهمد چکار باید بکند.
منویمان را میتوانیم توسط دستور ECHO که قبلا" یاد گرفتیم درست کنیم. من برای این مثال نمونه زیر را درست کردم
لذا شروع میکنیم
1. برنامه notepad را باز کرده و در آن سطور زیر را تایپ کرده و سپس آن را با نام فرضا" Run.cmd ذخیره کنید:
در این منو کاربر چهار تا گزینه خواهد دید .کد:@ECHO off cls :Menu ECHO. ECHO. ECHO @@@@@@@@@@@@@@@@@@@@@@ ECHO. @ @ ECHO @ 1. Run notepad @ ECHO @ 2. Run MSPait @ ECHO @ 3. Run Calculator @ ECHO @ 4. Exit @ ECHO @ @ ECHO @@@@@@@@@@@@@@@@@@@@@@ ECHO. ECHO.
2. حالا باید دو تا کار انجام بدهیم ، اول اینکه به کاربر بگوییم که یکی از گزینه ها را انتخاب کند و دوم اینکه کاری کنیم
که گزینه ای که کاربر انتخاب کرده اجرا شود.
برای اینکار از دستور set بهمراه سویچ P/ استفاده میکنیم. بدینطریق که سطر زیر را به فایل Run.cmd اضافه میکنیم:
با دستور بالا کاربر فقط عبارت "Type the Program number to Run" را مشاهده خواهد کرد. که به کاربر گفته شمارهکد:set /p ABC=Type the Program number to Run:
برنامه مورد نظرش را انتخاب کند تا برنامه اجرا شود.
3. حالا یکی از چند حالت زیر اتفاق خواهد افتاد:
__ کاربر یکی از شماره های 1 تا 4 را که در منو نشان داده شده تایپ کرده و کلید Enter را فشار می دهد.
__ ممکن است کاربر بخواهد اذیت کند و هیچ شماره ای را انتخاب نکرده ولی کلید Enter را فشار دهد.
__ ممکن است شماره ای بغیر از اعداد نشان داده شده ( 1 تا 4 ) انتخاب کرده و Enter را فشار دهد.
ما باید برای هر حالتی که ممکن است اتفاق بیفتد برنامه ریزی داشته باشیم لذا بروش زیر عمل میکنیم
تا جلسه بعد
[SIGPIC][/SIGPIC]
در جلسه قبل منوی ساده ای با چهار گزینه طراحی کرده و به کاربر گفتیم که یکی از 4 گزینه موجود را انتخاب کند
تا اجرا شود
حال بقیه ماجرا:
در سطر بعدی فایل Batch دستور زیر را می نویسیم:
در این جا فرض کرده ایم که کاربر هیچ شماره ای را انتخاب نکرده و فقط کلید Enter را فشار داده است. حالا ببینیمکد:if '%ABC%'=='' ECHO You did not enter valid number ,please try again
با این دستوری که دادیم چه اتفاقی می افتد.
در سطر قبل از این سطر ، از دستور set بهمراه p/ استفاده کردیم ، در ادامه دستور عبارت =ABC را نوشتیم و بعد از
علامت = عبارت : Type the Program number to Run را نوشتیم.
این بدان معنی است که برنامه دو تا کار باید انجام دهد:
1. عبارت بعد از مساوی را به کاربر نشان دهد.
2. عکس العمل کاربر را هر چه که هست درون متغیری بنام ABC ذخیره کند.
یعنی با دستور فوق یک متغیر بنام ABC تعریف کرده ایم که برنامه در داخل آن عکس العمل کاربر را ذخیره خواهد کرد.
فرضا" اگر کاربر کلید 1 را تایپ کرده و بعد کلید Enter را فشار دهد برنامه مقدار ABC را برابر 1 ذخیره خواهد کرد.
حالا میخواهیم از این متغیر استفاده کنیم . قبلا" گفتم که برای استفاده از متغیر باید نام متغیر را ما بین دو علامت %%
قرار دهیم.
در بالا گفتم که کاربر هیچ شماره ای را انتخاب نکرده و فقط کلید Enter را فشار داده است یعنی با شرح داده شده ،
برنامه ، در داخل متغیر ABC ، مقدار " هیچ چیز" را ذخیره کرده است.
بنابر این در اینجا از دستور شرطی IF استفاده کرده و گفته ایم که اگر داخل متغیر ABC خالی باشد ، یک پیغام نشان
داده و در آن بگوید "شما عدد درستی وارد نکردید ، لطفا" دوباره وارد کنید".
شرط خالی بودن مقدار متغیر را بصورت زیر نشان داده ایم:
همانطور که می بینید بعد از دو تا علامت مساوی مقداری در داخل دو علامت ،، وجود ندارد.کد:'%ABC%'==''
حال دستور بعدی را باید بنویسیم . این دستور (که در سطر زیر مشاهده می کنید) ،مثل دستور قبلی است با این فرق
که در اینجا مقدار متغیر ABC خالی نبوده و برابر 1 در نظر گرفته شده است:
همانطور که می بینید در این دستور با استفاده از دستور goto که قبلا" در موردش صحبت کردیم ، به برنامه گفته ایمکد:if '%ABC%'=='1' goto PA
که اگر کاربر عد 1 را وارد کرده باشد ، برود و دستورات زیر سطر PA را اجرا کند.
حالا باید سطر PA را درست کرده و زیر آن دستور یا دستوراتی که باید اجرا شود را می نویسیم .در این مثال که میخواهیم
اگر کاربر کلید 1 را فشار دهد برنامه notepad اجرا شود ، دستورات زیر را می نویسیم:
و همین طور برای دیگر حالات هم دستورات لازم را می نویسیم که در نهایت برای این مثال خواهیم داشت:کد::PA notepad.exe
مثال را تست کنید و درباره اش فکرکنیدکد:@ECHO off cls :Menu ECHO. ECHO. ECHO @@@@@@@@@@@@@@@@@@@@@@ ECHO. @ @ ECHO @ 1. Run notepad @ ECHO @ 2. Run MSPait @ ECHO @ 3. Run Calculator @ ECHO @ 4. Exit @ ECHO @ @ ECHO @@@@@@@@@@@@@@@@@@@@@@ ECHO. ECHO. set /p ABC=Type the Program number to Run: if '%ABC%'=='' ECHO You did not enter valid number ,please try again if '%ABC%'=='1' goto PA if '%ABC%'=='2' goto PB if '%ABC%'=='3' goto PC if '%ABC%'=='4' goto end ECHO. goto Menu :PA notepad.exe goto end :PB mspaint.exe goto end :PC calc.exe goto end :end exit
تابعد
[SIGPIC][/SIGPIC]
دوست ارجمندم (سهند) چندین بار در رابطه با اینکه عبارت dp0~% چیست و به چه منظوری در فایل های Batch
بکار میرود سوال کرده که من هنوز جواب واضحی به ایشان نداده ام.
جواب نداده ام چون توضیح مطلب تا اینجای بحثمان مقداری گیج کننده بود و نمیشد در یکی دو سطر توضیح داد. امروز
در رابطه با همین مطلب بحث می کنیم.
ما بعضی از موارد استفاده دستور set را در پست های قبلی مطالعه کردیم.
ما دیدیم که این دستور اطلاعاتی را در یک متغیر نگهداری میکند و ما از اطلاعات ذخیره شده درون این متغیر استفاده
میکنیم.
موقعیکه ما میخواهیم توسط یک فایل Batch برنامه ای را اجرا کنیم ، فایل Batch باید دقیقا" محلی را که برنامه قرار
گرفته بداند و گرنه برنامه اجرا نخواهد شد.
فرض کنید که میخواهیم برنامه AA.exe را که داخل پوشه D:\Windows\system32\Apllications\WWW\XXX\TTT\ZZZ
قرار دارد توسط یک فایل Batch که در دسکتاپ قرار دارد اجرا کنیم.
معلوم است که در حالت ابتدائی باید دستور زیر را در فایل Batch تایپ کنیم:
D:\Windows\system32\Apllications\WWW\XXX\TTT\ZZZ\A A.exe
معلوم است که این آدرس خیلی طولانی است و مخصوصا" اگر چندین فایل مثلا" 20 فایل در آدرس فوق باشند و ما
بخواهیم بترتیب همه آن ها را اجرا کنیم ، نوشتن این آدرس طولانی برای تک تک آن ها هم بسیار خسته کننده شده
و هم احتمال اشتباه تایپی وجود دارد و هم فایل Batch درست شده بسیار گیج گننده و گنگ خواهد بود.
و نیز قبلا" گفتم که در اینگونه موارد بهتر است از دستور set استفاده کنیم تا هم کارمان ساده تر شود و هم فایل Batch
نهائی واضح تر باشد.
و گفتم که به این طریق عمل میکنیم که اول در یک سطر دستوری مثل دستور زیر را در ابتدای فایل Batch می نویسیم:
set ABCD=D:\Windows\system32\Apllications\WWW\XXX\TTT\ ZZZ
با این دستور ما یک متغیر بنامABCD درست کرده و به فایل Batch گفتیم که منبعد هر جا متغیری بنام ABCD دید ،آن
را آدرس بالا بداند.
حال که فرضا" میخواهیم فایل AA.exe را در آدرس مورد بحث اجرا کنیم ، دیگر لازم نیست که دستور دراز بالا را بنویسم
و کافی است که بجای آن از عبارت زیر استفاده کنیم:
حالا فایل Batch موقع اجرا وقتی به عبارت ABCD برسد که ما بین دو علامت %% قرار گرفته می فهمد که ABCDکد:%ABCD%\AA.exe
یک متغیر است و فوری مقدار این متغیر را بجای عبارت ABCD گذاشته و فایل مورد نظر را از محل مورد نظر اجرا میکند.
شما میتوانید در ابتدای فایل Batch با استفاده از دستور set هر تعداد متغیر برای آدرس های مختلف درست کنید.
گاهی آدرس محل کار ما متفاوت است و ما نمیتوانیم یک متغیر ثابت معرفی کنیم
فرض کنید شما یک پوشه ای بنام XXX دارید که داخل آن تعدادی فایل های مختلف وجود دارند و شما میخواهید که
تمام این فایل ها را با دستورات یک فایل Batch که آن هم داخل همین پوشه هست اجرا کنید.
مهم نیست که پوشه XXX در کدام محل بوده باشد ویا حتی نامش چه چیزی باشد ، مهم این است که ما باید به فایل
Batch بگوئیم که تک تک فایل ها را باید از همین پوشه که خودش قرار دارد پیدا کرده و اجرا کند.
در اصطلاح کامپیوتر باید به فایل Batch بگوئیم که فایل ها را از Current Directory پیدا و اجرا نماید.
یک روش رایج برای اینکار این است که در ابتدای فایل Batch متغیری بصورت زیر معرفی کنیم:
Set WorkDir=%~dp0
خاصیت این دستور این است که فایل Batch بعد از این سطر هر جا عبارت عبارت dp0~% را ببیند خواهد فهمید که
منظور همین محلی است که خودش قرار دارد.
برای مثال اگر ببیند دستور زیر نوشته شده:
فوری خواهد فهمید که فایل SBC.exe در کنار خودش قرار دارد و آن را اجرا خواهد کرد.کد:Set WorkDir=%~dp0 %~dp0"SBC.exe"
اگر مطلب گیج کننده و نامفهوم است یادداشت بگذارید تا بیشتر توضیح دهم.
[SIGPIC][/SIGPIC]
1-استاد پس اگر درست فهمیده باشم Set WorkDir=%~dp0 یعنی اینکه به فایل بچ دستور میدهیم کاری که فایل بچ انجام میخواهی بدی همشون در این پوشه ای هستند که خودت توش قرار داری
2- این دستور بعد Echo off @ در سطر دوم قرار دارد واگر بخواهیم که فایل بچ بفهمد که به ترتیب پوشه های دیگری هم هستند که به وقتش اونا رو هم اجرا کنه باید به ترتیب در سطر سوم و چهارم هم بهش این دستور رو بدهیم که فایلها کجا هستند منتها با این تفاوت که بجایش Set WorkDir=xxx بذاریم
علاقه مندی ها (بوک مارک ها)