پاسخ : دستورات فایلهای Batch
نقل قول:
نوشته اصلی توسط
سهند
استاد یه سوال داشتم
ما در داخل سی دی ویندوز sources\$oem$\$$\Setup\Scripts یه فایل SetupComplete.cmd داریم که با اجرا شدن اون یه تعداد نرم افزار نصب میشوند ودر ادرس sources\$oem$\$$\Setup\xxx یه فایلی به نام install.cmd داریم ومیخواهیم که در سطر سوم فایل SetupComplete.cmd یه فرمانی برای اجرای فایل install.cmd هم بنویسیم با توجه به ادرس فایل install.cmd فرمان اجرای این فایل در سطر سوم SetupComplete.cmd چطوری خواهد بود البته در اول همه دستورات موجود در فایل SetupComplete.cmd یه چیزی هم هست که با این نوشته شروع میشوند
DPO~%
اگر فایل Install.cmd در داخل پوشه sources\$oem$\$$\Setup\xxx قرار دارد
اول در ابتدای فایل setupcomplete.cmd بعد از سطر Echo off @ دستور زیر را بنویس:
کد:
set AA=%WINDIR%\Setup\xxx
سپس در سطر مورد نظر دستور زیر را بنویس که فایل Install.cmd را اجرا کند:
کد:
CALL %AA%\Install.cmd
پاسخ : دستورات فایلهای Batch
استاد در داخل پوشه 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
پاسخ : دستورات فایلهای Batch
پاسخ : دستورات فایلهای Batch
استاد در مورد اشکال مورد استفاده در فایلهای بچ توضیحاتی میدهید
پاسخ : دستورات فایلهای Batch
نقل قول:
نوشته اصلی توسط
سهند
استاد در مورد اشکال مورد استفاده در فایلهای بچ توضیحاتی میدهید
سهند جان منظورت را درست متوجه نشدم ولی بهر حال در بحث های چند روز آینده وارد قسمت های نیمه سخت خواهیم شد
که فکر میکنم جواب سوال هایت را خواهی گرفت.
پاسخ : دستورات فایلهای Batch
استاد منظورم تقریبا اینا هست یا چیزاهای مشابه دیگه که تو بعضی فایلهای بچ هستند
=%~dp0
پاسخ : دستورات فایلهای Batch
دستور 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 میتوانیم دستور بالا را بصورت ساده و مفهوم زیر در بیاوریم:
کد:
set AA=C:\Windows\system32\XXX\YYY\ZZZ
%AA%\AA.exe
%AA%\BB.exe
%AA%\CC.exe
می بینید که این فایل Batch نسبت به قبلی چقدر ساده تر و مفهوم تر شده است.ما در بالا در سطر اول با استفاده
از دستور 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 اضافه میکنیم:
کد:
set /p ABC=Type the Program number to Run:
با دستور بالا کاربر فقط عبارت "Type the Program number to Run" را مشاهده خواهد کرد. که به کاربر گفته شماره
برنامه مورد نظرش را انتخاب کند تا برنامه اجرا شود.
3. حالا یکی از چند حالت زیر اتفاق خواهد افتاد:
__ کاربر یکی از شماره های 1 تا 4 را که در منو نشان داده شده تایپ کرده و کلید Enter را فشار می دهد.
__ ممکن است کاربر بخواهد اذیت کند و هیچ شماره ای را انتخاب نکرده ولی کلید Enter را فشار دهد.
__ ممکن است شماره ای بغیر از اعداد نشان داده شده ( 1 تا 4 ) انتخاب کرده و Enter را فشار دهد.
ما باید برای هر حالتی که ممکن است اتفاق بیفتد برنامه ریزی داشته باشیم لذا بروش زیر عمل میکنیم
تا جلسه بعد
پاسخ : دستورات فایلهای Batch
در جلسه قبل منوی ساده ای با چهار گزینه طراحی کرده و به کاربر گفتیم که یکی از 4 گزینه موجود را انتخاب کند
تا اجرا شود
حال بقیه ماجرا:
در سطر بعدی فایل Batch دستور زیر را می نویسیم:
کد:
if '%ABC%'=='' ECHO You did not enter valid number ,please try again
در این جا فرض کرده ایم که کاربر هیچ شماره ای را انتخاب نکرده و فقط کلید Enter را فشار داده است. حالا ببینیم
با این دستوری که دادیم چه اتفاقی می افتد.
در سطر قبل از این سطر ، از دستور set بهمراه p/ استفاده کردیم ، در ادامه دستور عبارت =ABC را نوشتیم و بعد از
علامت = عبارت : Type the Program number to Run را نوشتیم.
این بدان معنی است که برنامه دو تا کار باید انجام دهد:
1. عبارت بعد از مساوی را به کاربر نشان دهد.
2. عکس العمل کاربر را هر چه که هست درون متغیری بنام ABC ذخیره کند.
یعنی با دستور فوق یک متغیر بنام ABC تعریف کرده ایم که برنامه در داخل آن عکس العمل کاربر را ذخیره خواهد کرد.
فرضا" اگر کاربر کلید 1 را تایپ کرده و بعد کلید Enter را فشار دهد برنامه مقدار ABC را برابر 1 ذخیره خواهد کرد.
حالا میخواهیم از این متغیر استفاده کنیم . قبلا" گفتم که برای استفاده از متغیر باید نام متغیر را ما بین دو علامت %%
قرار دهیم.
در بالا گفتم که کاربر هیچ شماره ای را انتخاب نکرده و فقط کلید Enter را فشار داده است یعنی با شرح داده شده ،
برنامه ، در داخل متغیر ABC ، مقدار " هیچ چیز" را ذخیره کرده است.
بنابر این در اینجا از دستور شرطی IF استفاده کرده و گفته ایم که اگر داخل متغیر ABC خالی باشد ، یک پیغام نشان
داده و در آن بگوید "شما عدد درستی وارد نکردید ، لطفا" دوباره وارد کنید".
شرط خالی بودن مقدار متغیر را بصورت زیر نشان داده ایم:
همانطور که می بینید بعد از دو تا علامت مساوی مقداری در داخل دو علامت ،، وجود ندارد.
حال دستور بعدی را باید بنویسیم . این دستور (که در سطر زیر مشاهده می کنید) ،مثل دستور قبلی است با این فرق
که در اینجا مقدار متغیر ABC خالی نبوده و برابر 1 در نظر گرفته شده است:
کد:
if '%ABC%'=='1' goto PA
همانطور که می بینید در این دستور با استفاده از دستور goto که قبلا" در موردش صحبت کردیم ، به برنامه گفته ایم
که اگر کاربر عد 1 را وارد کرده باشد ، برود و دستورات زیر سطر PA را اجرا کند.
حالا باید سطر PA را درست کرده و زیر آن دستور یا دستوراتی که باید اجرا شود را می نویسیم .در این مثال که میخواهیم
اگر کاربر کلید 1 را فشار دهد برنامه notepad اجرا شود ، دستورات زیر را می نویسیم:
و همین طور برای دیگر حالات هم دستورات لازم را می نویسیم که در نهایت برای این مثال خواهیم داشت:
کد:
@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
مثال را تست کنید و درباره اش فکرکنید
تابعد
پاسخ : دستورات فایلهای Batch
دوست ارجمندم (سهند) چندین بار در رابطه با اینکه عبارت 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 گذاشته و فایل مورد نظر را از محل مورد نظر اجرا میکند.
شما میتوانید در ابتدای فایل Batch با استفاده از دستور set هر تعداد متغیر برای آدرس های مختلف درست کنید.
گاهی آدرس محل کار ما متفاوت است و ما نمیتوانیم یک متغیر ثابت معرفی کنیم
فرض کنید شما یک پوشه ای بنام XXX دارید که داخل آن تعدادی فایل های مختلف وجود دارند و شما میخواهید که
تمام این فایل ها را با دستورات یک فایل Batch که آن هم داخل همین پوشه هست اجرا کنید.
مهم نیست که پوشه XXX در کدام محل بوده باشد ویا حتی نامش چه چیزی باشد ، مهم این است که ما باید به فایل
Batch بگوئیم که تک تک فایل ها را باید از همین پوشه که خودش قرار دارد پیدا کرده و اجرا کند.
در اصطلاح کامپیوتر باید به فایل Batch بگوئیم که فایل ها را از Current Directory پیدا و اجرا نماید.
یک روش رایج برای اینکار این است که در ابتدای فایل Batch متغیری بصورت زیر معرفی کنیم:
Set WorkDir=%~dp0
خاصیت این دستور این است که فایل Batch بعد از این سطر هر جا عبارت عبارت dp0~% را ببیند خواهد فهمید که
منظور همین محلی است که خودش قرار دارد.
برای مثال اگر ببیند دستور زیر نوشته شده:
کد:
Set WorkDir=%~dp0
%~dp0"SBC.exe"
فوری خواهد فهمید که فایل SBC.exe در کنار خودش قرار دارد و آن را اجرا خواهد کرد.
اگر مطلب گیج کننده و نامفهوم است یادداشت بگذارید تا بیشتر توضیح دهم.
پاسخ : دستورات فایلهای Batch
1-استاد پس اگر درست فهمیده باشم Set WorkDir=%~dp0 یعنی اینکه به فایل بچ دستور میدهیم کاری که فایل بچ انجام میخواهی بدی همشون در این پوشه ای هستند که خودت توش قرار داری
2- این دستور بعد Echo off @ در سطر دوم قرار دارد واگر بخواهیم که فایل بچ بفهمد که به ترتیب پوشه های دیگری هم هستند که به وقتش اونا رو هم اجرا کنه باید به ترتیب در سطر سوم و چهارم هم بهش این دستور رو بدهیم که فایلها کجا هستند منتها با این تفاوت که بجایش Set WorkDir=xxx بذاریم