توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : دستورات فایلهای Batch
با سلام ودرود
دستوراتی که در داخل فایلهای Batch مینویسیم چجوری هستند وچجوری باید دستورات داخل فایل رو پیدا کنیم که چه کلمه ای چکار میکند کلا اموزش این فایلها
Magsoud
05-17-2014, 08:33 PM
بحث در مورد فایل های Batch خیلی بحث طولانی و زمانبری هست
بهر حال ، من سال ها قبل اولین بار مطالعه فایل Batch را با فایل pdf زیر شروع کردم»
Batch File Programming By Ankit Fadia (http://entrance-exam.net/forum/attachments/general-discussion/18263d1299308200-information-about-ethical-hacking-batch-file-programming-ankit-fadia.pdf)
این مطلب را کاربری با نام Ankit Fadia نوشته که نمیدانم چرا فکر میکنم نویسنده یک ایرانی باید باشد
eDvArDo
05-18-2014, 10:45 AM
سلام
طرف يک هکر بسيار معروف هنديه! Ankit Fadia - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Ankit_Fadia)
http://starblockbuster.com/sites/default/files/styles/cover/public/new1-1.jpg
http://cdnlarge.bookadda.com/bk_images/141/9788125918141.jpg
http://rajkot.onlyforads.com/uploads/1389333352_35.jpg
http://www.indiacollegesearch.com/upload/institute/events/ethica.jpg
سپاس
eDvArDo
05-18-2014, 04:22 PM
سلام
اينم يه فايل pdf فارسي که مطالب آموزشي و کدهاي مربوطه براي دستوارت cmd رو داره. پيوست براي دوستان خوبم:
سپاس
استاد اگه لینکی برای کتاب فارسی دارید ممنون میشم بذارید:yeah:
Magsoud
05-18-2014, 08:06 PM
سهند عزیز کتابی به زبان فارسی سراغ ندارم
ولی سعی میکنم که در ادامه همین تاپیک ، خلاصه ای از کتابی که در پست شماره 2 از Ankit Fadia معرفی
کردم را ، بطور مفهومی ( البته با تغییرات و روش خودم ) ترجمه و توضیح دهم.
eDvArDo
05-19-2014, 10:32 AM
سلام
استاد اگه لینکی برای کتاب فارسی دارید ممنون میشم بذارید:yeah:
سهندجان، مگه اون فايلي که در بالا پيوست کردمرو دانلود نکرديد؟! :ekh2:
فکر کنم براي آشنايي و شروع خوب باشه. empathy
سپاس
Magsoud
05-19-2014, 02:16 PM
من نمیخواهم با صحبت کردن درمورد DOS و دستورات آن و یا تاریخچه و چگونگی بوجود آمدن آن ، سرتان را بدرد بیاورم.
فقط همینقدر میگویم که ما اگر با دستورات DOS آشنا باشیم میتوانیم خیلی از کار هایمان را در ویندوز بطور اتوماتیک
و حتی مخفی انجام دهیم که نمونه هایش را در تاپیک های مختلف ، مخصوصا" در بحث های اتوماتیک سازی نصب
برنامه ها مشاهده کردید.
در این بحث من دستورات موجود در کتاب Batch File Programming نوشته Ankit Fadia را نه آنگونه که نویسنده گفته
بلکه با روش خودم توضیح خواهم داد. و سعی خواهم کرد که با آوردن مثال هائی شما را با طرز کار دستورات مختلف
آشنا کنم.
تذکرات:
__ دستورات یک فایل Batch دستوراتی هستند که باید بترتیب و سطر به سطر داخل برنامه Notepad نوشته شده و
در انتها این فایل را باید با پسوند bat ذخیره کنیم.
__ یک فایل Batch باید دارای پسوند bat باشد ولی اگر در ویندوز بجای پسوند bat از پسوند cmd استفاده کنید ، فایل
Batch بهتر و سریعتر کار خواهد کرد.
__ فایل Batch در موقع اجرا دستورات نوشته شده را یکی یکی و سطر به سطر اجرا میکند. یعنی اول دستور سطر
اول و بعد دستور سطر دوم و الی آخر...
چند دستور مقدماتی
============
برنامه Notepad را باز کرده و داخل آن عبارت xxx.exe را تایپ کرده و سپس آن را با نام Do.cmd در دسکتاپ ذخیره
کنید.(توضیح اینکه فایلی بنام xxx.exe وجود ندارد و من برای اینکه بتوانم شما را با مفهوم بعضی دستورات آشنا کنم
گفتم این عبارت را تایپ کنید).
حالا با دابل کلیک کردن روی فایل Do.cmd آن را اجرا کنید.
هیچ اتفاقی نخواهد افتاد ، فقط شما یک لحظه صفحه سیاهی را خواهید دید که بسرعت بسته میشود.
در این جا فایل Batch اجرا شده و کاری را که باید ، انجام داده ولی ما نمیتوانیم ببینیم که چه کاری انجام داده است.
پس چکار باید بکنیم؟ چگونه بفهمیم در اثر اجرای این فایل چه عملی صورت گرفته است؟
فایل Do.cmd را توسط Notepad باز کرده و در سطر دوم (زیر عبارت xxx.exe) دستور pause را تایپ کرده و ذخیره کنید
حال دوباره فایل Do.cmd را اجرا کنید. صفحه ای مثل شکل زیر نمایان خواهد شد.
http://www.worldup.ir/images/76kta2atmaf8pykslrs.png (http://www.worldup.ir/)
می بینید که صفحه بالا تا زمانیکه شما یک کلیدی را در کیبورد فشار دهید ، باز می ماند.
گفتیم که یکی از ویژگی های فایل Batch این است که دستورات را یکی یکی و سطر به سطر اجرا میکند. حال ببینیم
با اجرای فایل Do.cmd چه اتفاقی افتاده:
1. فایل Batch شروع به اجرای دستور موجود در اولین سطر (یعنی xxx.exe ) میکند. همان طور که در تصویر بالا
مشاهده میکنید ، برنامه خواسته دستور xxx.exe را اجرا کند ولی نتوانسته و گفته که نمیدانم xxx.exe چه دستوری هست.
2. فایل Batch بعد از دادن پیام در رابطه با فایل xxx.exe شروع به اجرای دستور دوم در سطر دوم (یعنی pause) میکند.
فایل Batch یکی از خاصیت هایش این است که اگر به دستور pause رسید دو تا کار انجام دهد:
الف: صفحه خط فر مان را تا زمانیکه کاربری کلیدی را فشار دهد ، باز نگهدارد.
ب . در آخرین سطر خط فرمان به کاربر پیغام دهد که "کلیدی را فشار بده تا ادامه دهم"
پس تا اینجا با عملکرد دستور pause آشنا شدیم.
اگر به تصویر بالا دقت کنید می بینید که پراز نوشته های مختلف بوده و بسیار گیج کننده است. شرح سطور تصویر بالا
بصورت زیر است:
1. در سطر اول می بینیم که فایل Do.cmd که از دسکتاپ اجرا کردیم ، اول سعی کرده فایل xxx.exe را در دسکتاپ
اجرا نماید.
2. فایل Batch نتوانسته فایل xxx.exe را شناسائی کند لذا در سطور 2 و 3 به ما پیغام داده که دستور یا فایلی بنام
xxx.exe را نمی شناسد.
3. در سطر بعدی می بینیم که فایل Batch دستور pause را اجرا کرده.
4. و در سطر آخر بخاطر اجرای دستور pause پیام داده شده که کلیدی را برای ادامه کار فشار دهید.
می بینید که صفحه بسیار شلوغ است و ما باید سعی کنیم که کاری کنیم که صفحه اینقدر شلوغ نباشد.اینجاست
که یک دستور دیگر بکار می آید.
در تصویر بالا دو تا پیغام داریم که لازم است دیده شوند اولی اینکه برنامه میگوید فایل xxx.exe را نمی شناسد و دوم
اینکه پیغام میدهد کلیدی را فشار دهید تا کار را ادامه دهم.
بنابر این در تصویر بالا نیازی به دیده شدن سطور اجرای فرمان ها ( در این مثال سطور 1 و 4 ) نیست.
برای این کار فایل Do.cmd را توسط Notepad باز کرده و در اول سطر (قبل از سطر xxx.exe) دستور @ECHO OFF را
تایپ کرده و ذخیره کنید
حال اگر مجددا" فایل Do.cmd را اجرا کنید. صفحه ای مثل شکل زیر نمایان خواهد شد.می بینید که سطور 1و 4 قبلی
دیگر نشان داده نمیشوند:
http://www.worldup.ir/images/00jdbq4koj04n2yroi0.png (http://www.worldup.ir/)
پس دیدیم که کار دستور ECHO OFF این است که سطور اجرای دستورات را مخفی کند.
یک دستور دیگر را هم امروز یاد میگیریم. ببینید ما در مثال هائیکه امروز کار کردیم ، آخرین فایل Batch که استفاده
کردیم دارای سه سطر بصورت زیر بود:
@ECHO OFF
xxx.exe
pause
فرض کنید که ما امروز فایل Do.cmd را با مشخصات بالا درست و استفاده کردیم. و بعد این فایل را کنار گذاشته و
جائی ذخیره کردیم.
و فرضا" دو سال بعد دوباره این فایل را با Notepad باز کردیم .متن بالا را خواهیم دید . الان میدانیم فرضا" دستور
pause کارش چیست و چرا استفاده کردیم ولی دو سال بعد دیگر یادمان نیست
ما میتوانیم در بالای هردستوری که داده ایم ، شرحی در مورد آن بنویسیم برای مثال میتوانیم در فایل Do.cmd
میتوانم توضیح زیر را بنویسم:
.....This is my first
برای اینکه دستورات امروز را درست متوجه شوید ایندفعه در فایل Do.cmd بجای دستور xxx.exe دستور notepad.exe
را قرار دهید و دستور pause را هم حذف کنید که در نتیجه به شکل زیر در خواهد آمد:
@ECHO OFF
REM This is my first ......
notepad.exe
اگر درست دقت کنید متوجه می شوید که قبل از توضیحات از دستور REM استفاده شده و بعد از یک فاصله توضیحاتمان را
نوشته ایم.
اگر توضیحاتمان در یک سطر جا نگیرد بایستی در اول سطر بعدی دوباره از دستور REM و یک فاصله استفاده کنیم.
فایل Batch موقع اجرا ، سطوری را که با دستور REM شروع شده اند ندیده میگیرد.
حالا فایل Do.cmd را با مشخصه های بالا اجرا کنید
برنامه notepad اجرا شده (دیگر نخواهد گفت نمی شناسم) و حالا صفحه فرمان هم نگاه کنید
اکنون در آخرین سطر فایل Do.cmd دوباره دستور pause را اضافه کرده و باز هم آن را اجرا کنید. چه فرقی کرد؟
اگر سوالاتی دارید مطرح فرمائید تا بعد در مورد دستورات دیگر هم صحبت کنم.
تا روزی دیگر و ادامه بحث
استاد از توضیحات تکمیل شما خیلی خیلی ممنونم واقعا خسته نباشیدفقط چندتا سوال داشتم که یک به یک میپرسم ببخشید استاد در بعضی از فایلهای بچ دیدم که از شکل وحرکات استفاده شده اینها چه معنی دارند
dp0
"xxxx"
~
%
/
nul
\
Magsoud
05-21-2014, 07:56 PM
سهند عزیز
صبر داشته باش تا اول بحث های کلی و مقدماتی را تمام کنیم
اگر مطالب را دنبال کنی بمرور جواب اکثریت سوالاتت را خواهی گرفت
دستور ECHO
=======
گاهی در یک فایل Batch ، لازم می دانیم که که پیغامی به کاربر بدهیم.
شاید لازم باشد که در یک مرحله از کار ، پرسشی از کاربر کرده و بعد بر اساس جواب کاربر کاری انجام شود.
در اینگونه موارد میتوانیم با استفاده از دستور ECHO به کاربر پیغام دهیم.
برای استفاده از این دستور اول دستور را نوشته و سپس بعد از یک فاصله ، پیغام خود را می نویسیم.
توجه داشته باشید که با این دستور فقط میتوان در یک سطر پیام داد. و اگر پیام ما بیش از یک سطر باشد بایستی
به سطر بعدی رفته و دوباره دستور فوق الذکر را نوشته و بعد از یک فاصله ،نصفه دوم پیام را بنویسیم.
برای مثال فایل Batch زیر را نوشته و اجرا کنید:
@ECHO OFF
ECHO =====================================
ECHO = Hello my friend =
ECHO = You are welcom to ariadl =
ECHO = Have nice times =
ECHO =====================================
pause
حال اگر آن را اجرا کنید صفحه ای مثل تصویر زیر خواهید داشت:
http://www.worldup.ir/images/w83qo7zxqj5valsftjyw.png (http://www.worldup.ir/)
می بینید که پیام های شما در چند سطر نشان داده میشوند.
ولی بهتر است فایل Batch با لا را بصورت زیر تغییر داده و اجرا کنید:
@ECHO OFF
ECHO =====================================
ECHO = Hello my friend =
ECHO.
ECHO = You are welcom to ariadl =
ECHO.
ECHO = Have nice times =
ECHO =====================================
pause
با اجرای آن صفحه ای مثل شکل زیر خواهید داشت
http://www.worldup.ir/images/ey5bpu7wff8b0wurja7.png (http://www.worldup.ir/)
نکته ای که در فایل Batch بالا و جود دارد این است که همانطور که در شکل می بینید مابین سطور نوشته ها یک
سطر خالی گذاشته ایم تا سطور واضح تر دیده شوند برای ایجاد فاصله خالی بین سطور از دستور ECHO با مختصر
تغییری استفاده کرده ایم (یعنی اول دستور ECHO را نوشته و به آن همانطور که می بینید یک دات (.) اضاف کرده ایم.
Magsoud
05-22-2014, 06:48 PM
در تکمیل مطلب جلسه قبلی فایل Batch زیر را درست کرده و اجرا فرمائید و بعد کلیدی را از کیبورد فشار دهید.
@ECHO OFF
Title=*************===== Shirin Zaban ===== ***********
MODE CON: COLS=52 LINES=15
color 1E
ECHO.
ECHO =====================================
ECHO = Hello my friend =
ECHO = =
ECHO = You are welcom to ariadl =
ECHO = =
ECHO = Have nice times =
ECHO =====================================
ECHO.
ECHO.
ECHO = Press any key to Continue ... =
pause>nul
cls
color 3f
ECHO.
ECHO.
ECHO.
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ECHO @ @
ECHO @ Thank you very much @
ECHO @ @
ECHO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ECHO.
ECHO.
ECHO = Press any key to Continue ... =
pause>nul
اجرای این فایل با فایل های قبلی چه فرقی دارد؟
دستور DEL
=======
این دستور یک یا چند فایل را حذف (Delete) میکند
فرض کنید که شما پوشه ای بنام XXX در روت درایو C دارید (C:\XXX) ، و تعدادی فایل درون آن قرار دارند.و باز فرض کنیم
که شما میخواهید با استفاده از فایل Batch فایلی بنام AAA.mp3 را که داخل پوشه C:\XXX قرار دارد را دیلیت کنید.
میتوانید اینکار را با فایل Batch با محتوای زیر انجام دهید:
@ECHO OFF
DEL C:\XXX\AAA.mp3
حالا فرض کنیم که در این مثال تعدادی فایل مختلف درون پوشه C:\XXX وجود دارد و شما میخواهید با فایل Batch همه آن
ها را دیلیت کنید. دستور لازم برای اینکار بصورت زیر است:
@ECHO OFF
DEL C:\XXX\*.*
دستور بالا همه فایل ها را حذف خواهد کرد ولی قبل از این کار یک پیغام داده و خواهد پرسید که " آیا مطمئن هستید؟"
و شما باید اول کلید Y را در کیبورد فشار داده و سپس کلید Enter را بزنید تا همه فایل های داخل این پوشه حذف شوند.
البته اگر بخواهید که از شما پرسشی نکند و مستقیما" همه فایل ها را دیلیت کند میتوانید از دستور زیر استفاده بکنید:
@ECHO OFF
DEL C:\XXX\*.* /Q
تذکر:
--------
دوستان عزیز ، دستوراتی که ما مطالعه میکنیم در شرایط مختلف ، بصورت متفاوتی عمل خواهند کرد که نمونه اش را
در مثال بالا مشاهده کردید.
من نمیتوانم همه دستورات و همه شرایط ممکنه را توضیح دهم.
چون این کار باعث خواهد شد که شرح مطلب این تاپیک ، ماه ها و ماه ها طول بکشد
لذا من فقط تعدادی از دستورات و شرح کار عادی آن ها را توضیح داده و رد خواهم شد.
اگر در هنگام تمرینات خود با مشکلی روبرو شدید اعلام بفرمائید تا در موردشان بحث کنیم.
eDvArDo
05-23-2014, 12:42 PM
سلام
استاد عزيز و مهربانم:
1- اگه بخواهيم تمامي فايلهاي اون پوشه "بجز" فلان فرمت يا فلان فايل حذف بشه دستور چطوري خواهد شد؟
2- آيا براي صادر کردن دستور بعدي که از همون نوع باشه (مثل دستور حذف فايل در فلان پوشه) البته اينبار در جاي ديگه بايد در سطر بعدي مثل دستور بالا عمل کنيم يا اينکه ميشه در ادامه همون سطر اضافه کنيم؟ (دستور چطوري ميشه؟)
سپاس
Magsoud
05-23-2014, 03:31 PM
هر دستور باید در سطر متفاوتی نوشته شود.
اگر بخواهیم فقط فایل های بخصوصی حذف شوند باید آن ها را مشخص کنیم فرضا" با دستور زیر فقط همه فایل هایی
دیلیت خواهند شد که دارای پسوند mp3 و یا txt باشند:
@ECHO OFF
DEL C:\XXX\*.mp3 /Q
DEL C:\XXX\*.txt /Q
دستور MD یا MKDIR
============
دو تا دستور بالا یکی هستند و شما میتوانید هرکدام را بدلخواه استفاده کنید.
این دستورات برای درست کردن دایرکتوری بکار میروند برای مثال با اجرای دستور زیر پوشه ای با نام XXX در درایو C
ساخته خواهد شد.
MD C:\XXX
تذکر اینکه اگر بخواهیم یک دایرکتوری در روت درایوی که ویندوز نصب شده درست کنیم ، دستور زیر این کار را انجام
خواهد داد:
MD \ABC
با دستور بالا اگر ویندوز در درایو C نصب شده باشد پوشه ای بنام ABC در روت درایو C درست خواهد شد ولی در
سیستم بنده که ویندوز در درایو E نصب شده ، با اجرای دستور بالا پوشه مورد نظر در روت درایو E درست خواهد شد.
اگر بخواهیم که پوشه مورد نظر ما در همین محلی که فایل Batch اجرا میشود ، درست شود از دستور زیر استفاده
میکنیم:
MD ABC
برای مثال اگر فایل Batch با دستور بالا را از دسکتاپ اجرا کنید پوشه ای بنام ABC در دسکتاپ درست خواهد شد.
دستور RD یا Rmdir
============
این دو تا دستور هم مثل هم هستند و کارشان این است که یک دایرکتوری را حذف (Delet) کنند.
توجه داشته باشید که این دستورات فقط پوشه ای را میتوانند دیلیت کنند که خالی باشد. یعنی اگر داخل یک پوشه
فایل ها و یا پوشه های دیگری وجود دارد اول باید محتویات آن را دیلیت کرده و سپس خود پوشه را با دستورات بالا
دیلیت بکنید.
با فرض اینکه میخواهید پوشه خالی C:\ABC را دیلیت کنید از دستور زیر استفاده نمائید:
RD C:\ABC
اگر در پوشه c:\ABC هم تعدادی فایل و هم تعدادی پوشه دیگر وجود داشته باشد میتوانید با دستور زیر هم فایل ها و
دایرکتوری های داخل آن و هم خود پوشه را دیلیت کرد:
RD /s c:\ABC
با اجرای این دستور ، قبل از این کار یک پیغام داده و خواهد پرسید که " آیا مطمئن هستید؟"و شما باید اول کلید Y
را در کیبورد فشار داده و سپس کلید Enter را بزنید تا پوشه با محتویاتش حذف شوند.
اگر میخواهید پوشه و محتویاتش بدون اعلام بالا حذف شوند از دستور زیر میتوانید استفاده کنید.
RD /s /Q c:\ABC
تا بعد
Magsoud
05-24-2014, 12:18 AM
دستور Move
=======
با این دستور میتوانیم یک یا چند فایل را از محلی به محل دیگر منتقل کنیم.
فرض کنیم شما پوشه ای با نام XXX در روت درایو E دارید که داخلش فایلی بنام music.mp3 قرار دارد و نیز پوشه ای
بنام zzz در روت درایو C وجود دارد.
حالا میخواهید با یک دستور فایل music.mp3 از داخل پوشه E:\XXX برداشته شده و داخل پوشه C:\ZZZ گذاشته
شود ، برای این کار از دستور زیر استفاده میکنیم:
move E:\XXX\music.mp3 C:\ZZZ\
دستور Rename یا ren
=============
دو تا دستور بالا مثل هم بوده و برای تغییر نام دادن فایل و یا پوشه بکار میروند.
برای مثال دستور زیر نام فایل music.mp3 را که داخل پوشه E:\XXX قرار دارد به abc.mp3 تغییر نام میدهد:
ren E:\XXX\music.mp3 abc.mp3
و دستور زیر نام پوشه XXX در روت درایو E را به AAA تغییر نام میدهد:
ren E:\XXX AAA
دستور Title
======
موقعیکه ما یک فایل Batch را بطور عادی اجرا می کنیم ، صفحه خط فرمان مثل شکل (1) زیر عبارت
Windows\system32\cmd.exe... را نشان می دهد . ولی ما میتوانیم با استفاده از دستور Title کاری کنیم که بجای
این عبارت، هر عبارت دیگر دلخواهمان نشان داده شود.
برای مثال با اجرای دستور زیر در اول فایل Batch ، عنوان خط فرمان عبارت Magsoud را نشان خواهد داد:
title Magsoud
http://www.worldup.ir/images/d522cn3ee6wsv2l6hie.png (http://www.worldup.ir/)
دستور shutdown
==========
توسط این دستور بهمراه سویچ های مختلف ،میتوانیم کامپیوتر را خاموش (shutdown) ، یا Restart و یا Log off کنیم.
اگر همراه سویچ l استفاده شود باعث می گردد که ویندوز Log off کند:
shutdown -l
اگر همراه سویچ s استفاده شود باعث می گردد که کامپیوتر خاموش (Shutdown) شود:
shutdown -s
با اجرای دستور بالا پنجره ای نمایان شده و تایمر موجود در برنامه بعد از 30 ثانیه کامپیوتر را خاموش می کند.
میتوانیم دستور بالا را بصورت زیر اجرا کنیم
shutdown -r -t 10 -c "eDvArDo eDvArDo eDvArDo eDvArDo eDvArDo"
که در این صورت پنجره مثل شکل زیر باز شده و تایمر برنامه بعد از 10 ثانیه کامپیوتر را خاموش میکند.
در ضمن با دستور بالا پیغام "eDvArDo eDvArDo eDvArDo eDvArDo eDvArDo" هم نشان داده خواهد شد.
http://www.worldup.ir/images/6p0fyaht6ghoswhsdh81.png (http://www.worldup.ir/)
اگر همراه سویچ r استفاده شود باعث می گردد که کامپیوتر Restart شود:
shutdown -r
این دستور موارد استفاده دیگری هم دارد که از حوصله این تاپیک خارج است .
تا بعد
eDvArDo
05-24-2014, 10:24 AM
سلام
استاد عزيز، دستورات کاربردي و بسيار جالب هستند. اما آموزش شيرين، روان و کامل شما دلنشينتر کرده. :yeah:
سپاس
Magsoud
05-24-2014, 11:58 PM
دستور CALL
=======
گاهی لازم میشود که یک فایل Batch در موقع اجرا ، یک فایل Batch دیگر را هم اجرا نماید.برای این کار از دستور CALL
استفاده میکنیم.
توجه داشته باشید که شما میتوانید مستقیما" و بدون استفاده از دستور CALL یک فایل Batch را توسط یک فایل Batch
دیگر استفاده کنید.
برای مثال فرض میکنیم که شما یک فایل Batch با نام فرضا" Do.cmd دارید که داخل آن دستور زیر را نوشته اید:
ABC.CMD
حال اگر فایل Do.cmd را اجرا کنید ، این فایل وقتی به سطری که دستور ABC.CMD وجود دارد رسید ، در صورتیکه
در کنارش فایلی بنام ABC.CMD وجود داشته باشد ، آن را اجرا خواهد کرد.
ولی این طریق اجرای یک فایل Batch از داخل یک فایل Batch دیگر ، یک اشکال بزرگ دارد و آن این است که فایل Batch
اولی پس از اجرای فایل Batch دوم ، بسته خواهد شد.
مفهومی تر بگویم فرض کنید که داخل فایل اول (Do.cmd) ، تعداد 10 سطر دستورات مختلف نوشته باشید که فرضا"
در سطر 3 دستور ABC.CMD نوشته شده است.
حال اگر این فایل را اجرا کنید دستورات سطر اول و سطر دوم اجرا شده و سپس فایل Batch موجود در سطر 3 (یعنی
ABC.CMD) اجرا شده و همزمان فایل Do.cmd بسته خواهد شد. یعنی دیگر دستورات بعد از سطر 3 و ببعد اجرا
نخواهند شد.
این یک اشکال هست که این اشکال با استفاده از دستور CALL برطرف میشود. فرض کنید که بجای دستور بالا دستور
زیر را در سطر سوم فایل Do.cmd بنویسید:
CALL ABC.CMD
حال اگر فایل Do.cmd را اجرا کنید ، بعد از اجرای دستورات سطور 1 و 2 ، فایل ABC.CMD اجرا خواهد شد. با این فرق
که با اجرای فایل ABC.CMD ، فایل Do.cmd بسته نشده بلکه منتظر تمام شدن کار ABC.CMD خواهد ماند و پس از آن
دوباره فایل Do.cmd اجرا شده و دستورات سطر 4 و ببعد را اجرا خواهد کرد.
تذکر این که عمل بالا در صورتی انجام خواهد شد که فایل دوم را خودمان نبندیم و بگذاریم کارش را نرمال انجام دهد.
مثال دیگر: دستور زیر فایل myfile.bat را که در روت درایو C قرار دارد ، اجرا خواهد کرد:
call c:\myfile.bat
دستور Copy
=======
توسط این دستور میتوانیم یک یا چند فایل را از محلی به محل دیگر کپی کنیم.
برای مثال دستور زیر فایل AAA.mp3 را از داخل پوشه E:\ZZZ به داخل پوشه C:\XXX کپی میکند:
Copy E:\ZZZ\AAA.mp3 C:\XXX\
این دستور دارای سویچ های مختلفی هم هست که اگر لازم بود بعدا" توضیح میدهم.
دستور GOTO
========
گاهی موقع انجام یک کاری متوجه میشویم که برای این کار وضعیت های مختلفی وجود دارد که هر وضعیت عمل
مخصوص خودش را لازم دارد.
برای مثال میخواهیم یک پوشه با نام XXX در روت درایو C درست کرده و فایل هائی داخلش کپی کنیم. در این زمان
دو حالت پیش می آید:
1. پوشه ای با نام XXX در روت درایو C وجود ندارد .
2. از قبل پوشه ای با نام XXX در روت درایو C وجود دارد.
حالا که میخواهیم پوشه ای با نام XXX در روت درایو C بسازیم و اطلاع نداریم که آیا پوشه ای با همین نام در محل
مذکور وجود دارد یا نه بنابراین می آئیم و فایل Batch خود را طوری می سازیم که بصورت زیر عمل کند:
__ اول ببیند که آیا پوشه ای با نام XXX در روت درایو C وجود دارد یا نه
__ اگر دید وجود دارد دستور X را اجرا کند.
__ اگر دید وجود ندارد دستور Z را اجرا کند.
یک راه برای انجام این کار این است که با دستوری به فایل Batch بفهمانیم که بطریق زیر عمل نماید:
___ اگر دید پوشه ای با نام XXX در روت درایو C وجود دارد در اینصورت برود و دستوری را که در سطر AAA هست اجرا کند.
___ اگر دید پوشه ای با نام XXX در روت درایو C وجود ندارد در اینصورت برود و دستوری را که در سطر ZZZ هست اجرا کند.
برای اینکه این کار را انجام دهیم از دستور GOTO بهمراه دستور شرطی استفاده می کنیم.
در مورد دستور شرطی در جلسه بعد صحبت خواهد شد. و در مورد دستور GOTO فعلا" فقط اینقدر میگویم که بعد از این
دستور باید عبارتی را بنویسیم (مثلا" برای حالت اول مثال بالا می نویسیم GOTO AAA).
و بعد باید در یک سطر از فایل Batch اول یک علامت : گذاشته و بعد جلویش عبارت AAA را بنویسیم.
و سپس زیر این سطر دستوراتی که میخواهیم اجرا شوند را می نویسیم.
وقتی برنامه دستور GOTO را دید (در صورتیکه شرط درست باشد) ، فوری از این قسمت دستورات به سطری که عبارت
AAA: دارد پریده و دستورات زیر این سطر را اجرا خواهد کرد.
در بحث بعدی مطلب را بیشتر متوجه خواهید شد.
Magsoud
05-25-2014, 10:04 PM
دستور IF (دستورات شرطی)
================
در مثال های مختلفی که در این تاپیک داشتیم ، دیدیم که دستورات ما دریک فایل Batch هر کدام در یک سطر مجزا
نوشته میشوند.
به محض اجرای فایل Batch ، دستورات پشت سر هم اجرا میشوند یعنی اول دستور موجود در سطر 1 و بعد دستور
سطر 2 و الی آخر تا تمام دستورات بترتیب شوند .
گاهی لازم میشود که بسته به موجود بودن شرایط بخصوصی کاری را انجام بدهیم.
برای مثال فرض کنیم که ما در کامپیوترمان، در روت درایو C پوشه ای بنام XXX داریم که مثلا"تمام فایل های خصوصی
خود را درون آن نگهداری می کنیم.
و باز فرض کنیم که از کامپیوتر ما کسان دیگری هم استفاده میکنند و فرضا" کاربر eDvArDo وارد کامپیوتر ما شده و
برای اذیت کردن ما نام پوشه XXX را عوض کرده و یا اصلا" آن را دیلیت کرده است!!
و دوباره فرض کنیم که ما از اتفاق بالا خبر نداریم و همین الان در دسکتاپ ما فایلی بنام AAA.mp3 وجود دارد که ما
میخواهیم توسط یک فایل Batch این فایل را به داخل پوشه C:\XXX کپی کنیم.
حال اگر فایل Batch با دستورات مربوطه را اجرا کنیم ، چون پوشه ای بنام C:\XXX وجود ندارد ، پیغام خطا دریافت
خواهیم کرد.
برای جلوگیری از اینگونه اتفاقات، میتوانیم فایل Batch را با استفاده از دستورات شرطی درست کنیم که همواره
درست کار کند.
فرضا" برای مثال بالا باید در فایل Batch خود دستوراتی قرار دهیم که بصورت زیر عمل کند:
1. به روت درایو C نگاه کند و ببیند که آیا پوشه ای بنام XXX وجود دارد یا نه.
2. اگر دید پوشه XXX وجود دارد ، فایل AAA.mp3 را از دسکتاپ به داخل آن کپی کند.
3. اگر دید پوشه XXX وجود ندارد ، اول پوشه ای به همین نام در آن جا درست کند و سپس فایل AAA.mp3 را از
دسکتاپ به داخل آن کپی کند.
می بینید ما در این مثال باید شرایط مختلفی را با هم مقایسه کرده (در این مثال بودن و نبودن پوشه C:\XXX) و
سپس در شرایط مختلف کار های مختلفی انجام بدهیم.
اینکه ما در شرایط متفاوت ، کار های متفاوتی را انجام بدهیم را کار های شرطی نامیده و این اعمال را توسط دستور
IF انجام میدهیم.
دستور IF دارای سویچ های متنوعی بوده و میتواند انجام خیلی از کار ها را برای ما آسان کند و من در این بحث بعضی
از کاربرد های آن را شرح خواهم داد.
یک فایل Batch با محتوای زیر درست کرده و آن را با نام Do.cmd در دسکتاپ ذخیره کنید:
@ECHO OFF
IF EXIST C:\XXX\ goto AAA
MD C:\XXX
copy AAA.mp3 C:\XXX\
exit
:AAA
copy AAA.mp3 C:\XXX\
exit
حال اگر فایل Batch بالا (Do.cmd) در دسکتاپ شما بوده و فایل AAA.mp3 هم در کنار آن باشد با اجرای این فایل
اعمال زیر انجام خواهد شد:
1. اگر پوشه C:\XXX موجود باشد فایل AAA.mp3 به داخل آن کپی خواهد شد. و بعد فایل Batch بسته خواهد شد.
2. اگر پوشه C:\XXX وجود نداشته باشد اول این پوشه ساخته شده و سپس فایل AAA.mp3 بداخل آن کپی شده و
بعد فایل Batch بسته خواهد شد.
شرح دستورات فایل Batch بالا بصورت زیر است:
__ دستور سطر 1 (ECHO OFF@): باعث مخفی شدن دستورات Batch میشود.
__ دستور سطر 2 (IF EXIST C:\XXX\ goto AAA): تست میکند که آیا پوشه C:\XXX وجود دارد یا نه.اگر ببیند وجود دارد
دیگر سطر های 3 و 4و 5 اجرا نشده و دستورات زیر سطر 6 (یعنی AAA: ) اجرا میشوند.
__ اگر پس از اجرای دستور سطر 2 ، پوشه پوشه C:\XXX وجود نداشته باشد ، برنامه دیگر به سطر 6 نمی پرد بلکه میرود
تا دستور سطر بعدی یعنی سطر 3 را انجام دهد.
__ دستور سطر 3 پوشه ای بنام XXX در درایو C می سازد.
__ دستور سطر 4 فایل AAA.mp3 را به داخل پوشه C:\XXX کپی میکند.
__ دستور سطر 5 فایل Batch را می بندد.
__ دستورات زیر سطر 6 فقط در صورتی اجرا خواهند شد که در سطر دوم ببینیم که پوشه C:\XXX وجود دارد.
ما میتوانیم این مثال را با نوع دیگری از دستورات انجام دهیم.برای مثال فایل Batch با محتوای زیر را درست و اجرا کنید:
@ECHO OFF
IF NOT EXIST C:\XXX\ goto AAA
copy AAA.mp3 C:\XXX\
exit
:AAA
MD C:\XXX
copy AAA.mp3 C:\XXX\
exit
این نوع درست برعکس فایل قبلی عمل میکند.
فایل قبلی در اول کار بودن پوشه ای بنام XXX را تست کرده و براساس آن کاری میکرد
ولی در نمونه جدید در اول کار نبودن پوشه ای بنام XXX تست شده و بر اساس نتیجه اقدامی صورت میگیرد.
در این جلسه یک نوع موارد استفاده دستور IF را دیدیم. اگر جائی نامفهوم و گنگ است بفرمائید تا توضیح داده و بعد
مثال های دیگر و انواع دیگر استفاده از IF را بحث خواهیم کرد.
Magsoud
05-26-2014, 05:43 PM
ادامه دستورات شرطی
============
در جلسه قبلی با یک نوع از دستورات مربوط به IF توانستیم بودن یا نبودن یک پوشه (Directory) را بفهمیم.
مطابق مثال زیر ، درست بهمان طریق میتوانیم بودن و نبودن یک فایل را متوجه شویم:
فایل Batch زیر را اجرا کنید.با اجرای این فایل اگر فایلی بنام " pagefile.sys" در روت درایو C موجود باشد یک پیغام داده
شده و اگر موجود نباشد ، پیغام دیگری نمایش داده خواهد شد:
@ECHO OFF
IF EXIST C:\pagefile.sys goto AAAA
IF NOT EXIST C:\pagefile.sys goto WWWW
:WWWW
echo.
echo.
echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@
echo.
echo Can not find "pagefile.sys: in root of drive C
echo.
echo @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@
echo.
echo.
pause>nul
EXIT
:AAAA
echo.
echo.
echo ================================================== =====
echo.
echo Yes there is file "pagefile.sys" in root of drive C
echo.
echo ================================================== =====
echo.
echo.
pause>nul
همانطوریکه در مثال بالا متوجه شدید ، من در این مثال شرطی بهمراه دستور IF براساس نیازم از دستورات دیگری هم
(ECHO OFF@ ، goto ، echo ، pause و EXIT )استفاده کرده ام که در موردشان در جلسات قبلی بحث کرده ایم.
در کل بسته به نیازمان میتوانیم از دستورات مختلف استفاده نمائیم.
توجه کنید که میتوانیم در یک زمان بودن یا نبودن بیش از یک فایل را هم جستجو کنیم . فرضا" دستورات زیر بودن و نبودن دو
تا فایل را تست خواهند کرد:
IF EXIST C:\pagefile.sys IF EXIST C:\config.sys goto AAAA
IF NOT EXIST C:\pagefile.sys IF NOT EXIST C:\config.sys goto WWWW
مطالب دیگری در مورد دستور IF وجود دارد ولی نمیتوانم الان در مورد آن ها صحبت کنم چون توضیح در مورد آن ها مستلزم
دانستن نکاتی هست که فعلا" نمیشود درباره آن ها صحبت کرد چون باعث سردرگمی کاربر خواهد شد.
اگر عمری بود ، اگر این تاپیک به اندازه کافی مشتری داشت ، و اگر حوصله من پیر مرد اجازه دهد ، بعدا" بمرور در جای
خود ، در مورد آن نکات نیز بحث خواهیم کرد.
دستور Attrib
=======
هر فایلی و یا هر پوشه ای دارای خواص مربوط بخودش هست.
برای مثال یک فایل میتواند خواص مختلفی داشته باشد مثلا" مخفی باشد (خاصیت Hidden) و یا فقط قابل خواندن
باشد (خاصیت Read-only) و یا ممکن است یک فایل سیستمی باشد (خاصیت System File) و غیره..
یک فایل ممکن است یکی یا چند تا خاصیت مختلف داشته باشد ، برای مثال فایل های سیستمی معمولا" دارای
هر سه خاصیت گفته شده در بالا هستند یعنی هم سیستمی هستند هم مخفی و هم Read-only .
با استفاده از دستور Attrib میتوانیم خواص فایل ها و پوشه ها را تغییر دهیم.
شاید بگوئید که این کار به چه دردمان میخورد؟ ولی اینگونه نیست . برای مثال اگر فرضا" ویروسی در فلاشتان وارد
شده باشد مطمئنا" اولین کاری که خواهد کرد این است که خودش را مخفی کند (خاصیت Hidden) و بعد حتما"
خودش را Read-only و یا حتی فایل سیستمی خواهد کرد.
معلوم است که در این زمان شما بصورت عادی نخواهید توانست آن ها را دیده و یا دیلیت کنید مگر اینکه اول با دستورات
Attrib آشنا باشید.
دستور Attrib دارای سویچ های مختلفی هست :
اگر با سویچ h+ استفاده شود فایل را مخفی ( Hidden ) میکند.فرضا" دستور زیر فایل xxx.txt در روت درایو E را مخفی
( Hidden ) میکند :
Attrib +h E:\xxx.txt
اگر با سویچ h- استفاده شود خاصیت مخفی بودن را برداشته و فایل را نمایان میکند.مثل:
Attrib -h E:\xxx.txt
اگر با سویچ s+ استفاده شود فایل را سیستمی کرده و اگر با سویچ s- استفاده شود خاصیت سیستمی بودن را برداشته
و فایل را عادی میکند.
اگر با سویچ r+ استفاده شود فایل را Read-only کرده و اگر با سویچ r- استفاده شود خاصیت Read-only را بر می دارد.
با این دستور میتوان همزمان بیش از یک سویچ استفاده کرد برای مثال دستور زیر فایل xxx.txt در روت درایو E را هم
Hidden ، هم Read-only و هم سیستمی میکند:
Attrib +s +r +h E:\xxx.txt
و یا اگر فایل بالا هم Hidden ، هم Read-only و هم سیستمی باشد دستور زیر هر سه خاصیت گفته شده را حذف
کرده و فایل عادی می شود:
Attrib -s -r -h E:\xxx.txt
میتوانیم همزمان خاصیت تعداد زیادی فایل را عوض کنیم. برای مثال با دستور زیر تمام فایل های موجود در پوشه
C:\xxx مخفی خواهند شد:
Attrib +h C:\xxx\*.*
فعلا" بحث دستور Attrib را هم در همین جا تمام کرده و دیگر موارد مربوطه را در صورت لزوم در جای خود توضیح خواهم داد.
Magsoud
05-27-2014, 07:53 PM
دستور Xcopy
=======
با این دستور که در حقیقت نوع پیشرفته دستور Copy است ، می شود تمام فایل ها و دایرکتوری های موجود در یک
محل را به محلی دیگر کپی کرد.
برای مثال میشود تمام محتوای درایو C (تمام فایل ها و پوشه ها ) را به درایو E کپی کرد
موقعیکه ما بهر علتی (مثلا" به منظور Backup) ، میخواهیم تمام فایل ها و دایرکتوری ها را از محلی به محل دیگر کپی
کنیم ، وضعیت های مختلفی ممکن است پیش بیاید.این دستور برای هرگونه وضعیت احتمالی دارای سویچ های متفاوتی
است که باید بنا به نیازمان استفاده کنیم. شرح تعدادی از این سویچ ها بصورت زیر است:
__ اگر بهمراه سویچ S/ بکار رود یعنی میخواهیم که تمام دایرکتوری های موجود در محل گفته شده و حتی دایرکتوری
های داخل دایرکتوری ها (Directories and Subdirectories) ، بغیر از آن هائیکه خالی هستند کپی شوند.
__ بهمراه سویچ H/ تمام فابل های مخفی و سیستمی را هم کپی خواهد کرد.
__ همراه سویچ R/ فایل های read-only را هم کپی خواهد کرد.
__ در زمان هائی لازم است که بهر علتی ، پیامی داده شود و از ما بخواهد که ادامه کار را تائید کنیم که اگر دستور
را همراه سویچ Y/ استفاده کنیم، این پیغام را نشان نخواهد داد.
یک مثال: فرضا" پوشه ای با نام AAA در روت درایو C قرار دارد که داخلش انواع فایل ها و پوشه های مختلف وجود دارند
و میخواهید که محتویات این پوشه به داخل پوشه ای بنام BBB در روت درایو E کپی شوند.
با دستور زیر در روت درایو E پوشه ای بنام BBB درست شده و تمام محتویات پوشه C:\AAA به داخل آن کپی خواهد شد.
XCOPY C:\AAA\*.* E:\BBB\ /S/H/C/F/R/Y
حتما" میدانید چرا سویچ های بالا را استفاده کرده ایم.
حالا دستور بالا را بصورت زیر اجرا کنید:
XCOPY C:\AAA\*.* E:\BBB\ /S/H/C/R/Y/q
چه فرقی داشت و چرا ؟
توجه داشته باشید که دستور Xcopy فایل هائی که در حین عمل کپی باز باشند را کپی نخواهد کرد.
دستور Xcopy دارای سویچ های دیگری هم هست ولی همین مقدار برای بحث ما کافی است.
استاد یه سوال داشتم
ما در داخل سی دی ویندوز sources\$oem$\$$\Setup\Scripts یه فایل SetupComplete.cmd داریم که با اجرا شدن اون یه تعداد نرم افزار نصب میشوند ودر ادرس sources\$oem$\$$\Setup\xxx یه فایلی به نام install.cmd داریم ومیخواهیم که در سطر سوم فایل SetupComplete.cmd یه فرمانی برای اجرای فایل install.cmd هم بنویسیم با توجه به ادرس فایل install.cmd فرمان اجرای این فایل در سطر سوم SetupComplete.cmd چطوری خواهد بود البته در اول همه دستورات موجود در فایل SetupComplete.cmd یه چیزی هم هست که با این نوشته شروع میشوند
DPO~%
Magsoud
05-28-2014, 06:11 PM
استاد یه سوال داشتم
ما در داخل سی دی ویندوز 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
استاد در داخل پوشه 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
Magsoud
05-28-2014, 08:41 PM
نگران نباش.
استاد در مورد اشکال مورد استفاده در فایلهای بچ توضیحاتی میدهید
Magsoud
05-29-2014, 12:45 AM
استاد در مورد اشکال مورد استفاده در فایلهای بچ توضیحاتی میدهید
سهند جان منظورت را درست متوجه نشدم ولی بهر حال در بحث های چند روز آینده وارد قسمت های نیمه سخت خواهیم شد
که فکر میکنم جواب سوال هایت را خواهی گرفت.
استاد منظورم تقریبا اینا هست یا چیزاهای مشابه دیگه که تو بعضی فایلهای بچ هستند
=%~dp0
Magsoud
05-29-2014, 12:41 PM
دستور 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 را فشار دهد.
ما باید برای هر حالتی که ممکن است اتفاق بیفتد برنامه ریزی داشته باشیم لذا بروش زیر عمل میکنیم
تا جلسه بعد
Magsoud
05-29-2014, 02:45 PM
در جلسه قبل منوی ساده ای با چهار گزینه طراحی کرده و به کاربر گفتیم که یکی از 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%'==''
همانطور که می بینید بعد از دو تا علامت مساوی مقداری در داخل دو علامت ،، وجود ندارد.
حال دستور بعدی را باید بنویسیم . این دستور (که در سطر زیر مشاهده می کنید) ،مثل دستور قبلی است با این فرق
که در اینجا مقدار متغیر ABC خالی نبوده و برابر 1 در نظر گرفته شده است:
if '%ABC%'=='1' goto PA
همانطور که می بینید در این دستور با استفاده از دستور goto که قبلا" در موردش صحبت کردیم ، به برنامه گفته ایم
که اگر کاربر عد 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
مثال را تست کنید و درباره اش فکرکنید
تابعد
Magsoud
05-30-2014, 01:02 AM
دوست ارجمندم (سهند) چندین بار در رابطه با اینکه عبارت 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 را در آدرس مورد بحث اجرا کنیم ، دیگر لازم نیست که دستور دراز بالا را بنویسم
و کافی است که بجای آن از عبارت زیر استفاده کنیم:
%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 در کنار خودش قرار دارد و آن را اجرا خواهد کرد.
اگر مطلب گیج کننده و نامفهوم است یادداشت بگذارید تا بیشتر توضیح دهم.
1-استاد پس اگر درست فهمیده باشم Set WorkDir=%~dp0 یعنی اینکه به فایل بچ دستور میدهیم کاری که فایل بچ انجام میخواهی بدی همشون در این پوشه ای هستند که خودت توش قرار داری
2- این دستور بعد Echo off @ در سطر دوم قرار دارد واگر بخواهیم که فایل بچ بفهمد که به ترتیب پوشه های دیگری هم هستند که به وقتش اونا رو هم اجرا کنه باید به ترتیب در سطر سوم و چهارم هم بهش این دستور رو بدهیم که فایلها کجا هستند منتها با این تفاوت که بجایش Set WorkDir=xxx بذاریم
Magsoud
05-30-2014, 04:07 AM
1
...اگر بخواهیم که فایل بچ بفهمد که به ترتیب پوشه های دیگری هم هستند که به وقتش اونا رو هم اجرا کنه باید به ترتیب در سطر سوم و چهارم هم بهش این دستور رو بدهیم که فایلها کجا هستند منتها با این تفاوت که بجایش Set WorkDir=xxx بذاریم
سهند عزیز
نام متغیر برای هر سطر باید متفاوت باشد فرضا" اگر سطر اول عبارت Set WorkDir داریم درسط دوم نباید کلمه WorkDir
باشد بلکه بجایش باید هر عبارتی غیر از این کلمه قرار بدهیم مثلا" set XXX و یا set BB و یا set Sahand
کلمه ای که بعد از دستور set نوشته میشود متغیر است.
اگر در یک فایل Batch فرضا" 10 تا متغیر تعریف کرده باشیم ، همه این ده متغیر ها باید نامی متفاوت داشته باشند.
نباید نام متغیر ها مثل هم باشد.
اگر نام همه متغیر ها را مثل هم بنویسی ، فایل Batch فقط آخرین متغیر را اجرا خواهد کرد.
استاد اگر بخواهیم یک فایل رجیستری مربوط به تنظیمات یک برنامه رو توسط فایل بچ اجرا کنیم که بصورت مخفی باشد دستور را باید به چه شکلی بنویسیم
Magsoud
05-30-2014, 02:26 PM
با فرض اینکه شما فایلی با نام xxx.reg داشته باشید ، با اجرای دستور زیر فایل فوق بصورت مخفی به رجستری اضافه خواهد شد:
regedit /s xxx.reg
Magsoud
05-31-2014, 02:14 AM
نکاتی مفید در رابطه با دستور ECHO
===================
قبلا" دیدیم که توسط این دستور میتوانیم پیغامی را به کاربر نشان دهیم.
فرضا" دستور ECHO Hello My Friend عبارت Hello My Friend را در صفحه خط فرمان نشان خواهد داد.
ما میتوانیم کاری کنیم که پیغام ما عوض اینکه در صفحه خط فرمان نشان داده شود در یک فایل متنی در محلی که
میخواهیم نوشته شود.
برای مثال دستور زیر را نوشته و اجرا کنید:
ECHO Hello My Friend >> C:\ABC.txt
بعد از اجرای این دستور اگر به روت درایو C بروید خواهید دید که در آن جا فایلی بنام ABC.txt درست شده که اگر این
فایل را با Notepad باز کنید خواهید دید که در داخلش پیغام بالا ( یعنی Hello My Friend ) تایپ شده است.
از نظر من این خاصیت خیلی بدرد خور است . برای درک بهتر به مثال زیر توجه کنید:
فرض کنیم که شما یک فایل Batch درست کرده اید تا یک برنامه را بطور مخفی نصب کند. و باز فرض میکنیم که لازم
است که در انتهای کار یک فایل رجستری بنام ABC.reg هم بصورت مخفی اجرا شود تا برنامه اکتیو گردد.
فرض سوم این است که شما بهر علتی (مثلا" مخفی کاری) ،نمیخواهید فایل ABC.reg را کنار فایل Batch قرار دهید.
خب اشکالی ندارد با نوشتن دستوراتی در فایل Batch ، خود فایل Batch میتواند فایل ABC.reg را هم درست کرده و
هم اجرا کند.
مثال : میخواهیم که فایل Batch در حین اجرا یک فایل رجستری با نام ABC.reg و با محتوای زیر ، در روت درایو C
ساخته و سپس آن را بطور مخفیانه اجرا کند:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall\7-Zip]
"DisplayIcon"="C:\\Program Files\\7-Zip\\7zFM.exe"
"DisplayName"="7-Zip 9.25 alpha"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
"UninstallString"="C:\\Program Files\\7-Zip\\Uninstall.exe"
برای این کار دستورات زیر را اجرا میکنیم:
@ECHO OFF
ECHO Windows Registry Editor Version 5.00 >> C:\ABC.reg
ECHO. >> C:\ABC.reg
ECHO [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall\7-Zip] >> C:\ABC.reg
ECHO "DisplayIcon"="C:\\Program Files\\7-Zip\\7zFM.exe" >> C:\ABC.reg
ECHO "DisplayName"="7-Zip 9.25 alpha" >> C:\ABC.reg
ECHO "NoModify"=dword:00000001 >> C:\ABC.reg
ECHO "NoRepair"=dword:00000001 >> C:\ABC.reg
ECHO "UninstallString"="C:\\Program Files\\7-Zip\\Uninstall.exe" >> C:\ABC.reg
regedit /s C:\ABC.reg
حالا شما برای امتحان فقط سطر آخر دستور بالا را ننوشته و فایل Batch را اجرا کنید.
حالا اگر به روت درایو C بروید خواهید دید که در آنجا فایل رجستری ای با نام ABC.reg درست شده است.
اگر مختصری به دستورات دقت کنید متوجه خواهید شد که این کار چگونه انجام شده
تا بعد.
Magsoud
05-31-2014, 08:49 PM
در جلسه قبل مثال هائی را دیدیم که در آن ها از علایم << استفاده کرده بودیم.
در این قسمت از بحث طرز کار علامت < و تفاوت آن را با علایم << بررسی میکنیم.
این دو نوع علامت و برخی علایم دیگر را در اصطلاح کامپیوتر Redirection Operators می نامند.
کامپیوتر در حالت کار نرمال ، یک تنظیمات اولیه دارد.برای مثال اگر ما در داخل ویندوز برنامه Microsoft Word را باز کرده
و سپس در کیبورد کلید A را فشار دهیم ، تنظیمات ویندوز به ویندوز میگوید که بعد از فشرده شدن کلید A در کیبورد،
علامت A را در مانیتور و روی صفحه برنامه Microsoft Word نشان دهد.
و یا اگر ما دستور ECHO Hello My Friend را در یک فایل Batch نوشته و آن را اجرا کنیم ، استاندارد ویندوز (تنظیمات
اولیه ویندوز ) به سیستم میگوید که پس از اجرای این دستور عبارت Hello My Friend در مانیتور و داخل صفحه خط
فرمان نشان داده شود.
و مثال دیگر اینکه اگر ما یک پرینتر داشته باشیم و فرضا" در برنامه Microsoft Word بعد از تایپ عباراتی در منوی برنامه
روی گزینه Print کلیک کنیم ، تنظیمات پیشفرض ویندوز به سیستم فرمان میدهد که پرینتر را اجرا کرده و محتویات
فایل موجود را Print کند.
منظور اینکه یک سری کار ها در ویندوز بصورت پیشفرض و از پیش تعیین شده هستند که ما اکثرا" با آن ها سر و کار
داریم.
ولی میشود کاری کنیم که ویندوز عوض کار های پیشفرض ، کار هایی را انجام دهد که ما میخواهیم.
مثال این کار را در جلسه قبل مشاهده کردید که بنده برای مفهوم تر شدن مطلب بنوعی دیگر در اینجا تکرار میکنم.
همانطور که در چندسطر قبل گفتم ، وقتی که ما دستور دستور ECHO Hello My Friend را در یک فایل Batch نوشته
و آن را اجرا کنیم ، تنظیمات اولیه ویندوز به سیستم میگوید که پس از اجرای این دستور عبارت Hello My Friend را در
مانیتور و داخل صفحه خط فرمان نشان دهد.
حال دستور فوق را به شکل زیر تغییر دهید:
ECHO Hello My Friend >> C:\ABC.txt
با اجرای این دستور ، دیگر ویندوز کار استاندارد و از پیش تعیین شده خود را انجام نخواهد داد یعنی عبارت مورد نظر
را در صغحه خط فرمان نشان نخواهد داد.
چون علایم << به ویندوز میگویند که پیغام مورد نظر را عوض نشان دادن در صفحه خط فرمان ، داخل یک فایل ( در این
مثال C:\ABC.txt) بگذارد.
نمیدانم که توانستم مطلب را درست جا بیندازم یا نه. بهر حال اگر نه سوالاتتان را مطرح بفرمائید تا توضیح دهم.
در اول بحث امروز گفتم که میخواهیم طرز کار استفاده از علامت < و فرق آن با علایم << را بدانیم.
این دو نوع کار مشابه انجام میدهند ولی یک فرق اساسی دارند که در مثال زیر تشریح شده است:
فرضا" در دستور گفته شده در بالا ، پس از اجرای فایل Batch دو حالت خواهیم داشت
1. فایلی بنام ABC.txt در روت درایو C وجود ندارد.
2. از قبل فایلی بنام ABC.txt در روت درایو C وجود دارد.
اگر فایلی بنام بنام ABC.txt در روت درایو C وجود نداشته باشد ، این فایل ساخته شده و پیغام مورد نظر داخلش نوشته
خواهد شد.
ولی اگر فایلی بهمین نام از قبل در این محل موجود باشد ، برنامه این فایل را باز کرده و در داخل آن بعد از آخرین سطر
اطلاعات موجود در آن، پیغام مورد نظر را خواهد نوشت.
حالا اگر در دستور بالا بجای اپراتور << از اپراتور < استفاده کنیم همه چیز مثل قبل است با یک تفاوت اساسی. این
اپراتور باعث خواهد شد که اول اطلاعات داخل فایل ABC.txt پاک شده و سپس فقط پیغام مورد نظر را خواهد نوشت.
برای درک بیشتر این اپراتور ، حتما" مثال جلسه قبل در رابطه با فایل رجستری را ، این بار با استفاده از اپراتور < بجای
اپراتور << امتحان کنید.
اگر امتحان بالا را انجام دادید شاید بگوئید با این تفاسیر اپراتور < بدرد نمیخورد و بهتر است که برای این کار ها همیشه
از اپراتور << استفاده کنیم.
ولی من میگویم با عجله نتیجه گیری کردید و این نتیجه گیری کاملا" غلط است. برای درک علت به مثال زیر توجه کنید.
در مثال جلسه قبل اول فایلی بنام ABC.reg در روت درایو C ساخته شده و سپس این فایل اجرا شد.
ولی فرض ما در مثال فوق بر این است که از قبل فایلی بنام ABC.reg در محل مذکور وجود ندارد.
حالا فرض کنید که قبلا" فایلی با همین نام در روت درایو C وجود داشته باشد. در اینصورت این فایل دارای محتوائی هم
هست . در نتیجه چون ما از اپراتور << استفاده کردیم ، محتوای قبلی این فایل پاک نشده و اطلاعات مورد نظر ما در انتهای
محتوای این فایل اضافه خواهد شد.
پس چکار باید کرد؟ اگر بخواهیم از اپراتور << استفاده کنیم که مشکل فوق الذکر را داریم. و اگر از اپراتور < استفاده
کنیم اگر تستی را که گفتم انجام داده باشید خواهید دید که فقط یک سطر (آخرین سطر ) اطلاعات ما داخل فایل
ABC.reg وجود دارد.
پس چکار باید کرد؟
جواب ساده است ما در مثال قبلی بایستی ، در اولین سطر از اپراتور < استفاده کرده و در بقیه سطور از اپراتور <<
استفاده کنیم
با این کار اگر احیانا" فایل ABC.reg در محل مذکور موجود باشد ، در سطر اول ، اپراتور < محتوای این فایل را پاک کرده
و متن مورد نظر ما را خواهد نوشت
و بقیه سطر ها را از اپراتور << استفاده میکنیم که بقیه مطالب ما درست اجرا شوند.
یعنی فایل ما باید بصورت زیر باشد:
@ECHO OFF
ECHO Windows Registry Editor Version 5.00 > C:\ABC.reg
ECHO. >> C:\ABC.reg
ECHO [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall\7-Zip] >> C:\ABC.reg
ECHO "DisplayIcon"="C:\\Program Files\\7-Zip\\7zFM.exe" >> C:\ABC.reg
ECHO "DisplayName"="7-Zip 9.25 alpha" >> C:\ABC.reg
ECHO "NoModify"=dword:00000001 >> C:\ABC.reg
ECHO "NoRepair"=dword:00000001 >> C:\ABC.reg
ECHO "UninstallString"="C:\\Program Files\\7-Zip\\Uninstall.exe" >> C:\ABC.reg
regedit /s C:\ABC.reg
تا اینجا نکاتی را در رابطه با اپراتور های Redirection ، مختصرا" مطالعه کردیم
در زیر یکی دو مورد دیگر از کاربرد های این اپراتور ها را توضیح داده و بحث اپراتور ها را بپایان میرسانم.
دستور زیر را در یک فایل Batch اجرا کنید:
echo %date%, %time% > C:\ABC.txt
اگر بعد از اجرای فایل Batch بالا به درایو C وارد شوید ، خواهید دید که در آن جا فایلی بنام ABC.txt درست شده و اگر
این فایل را باز کنید خواهید دید که داخلش عبارتی شبیه عبارت زیر نوشته شده است:
Sat 05/31/2014, 17:17:34.81
این عبارت میگوید که در زمان اجرای دستور بالا، تاریخ روز یکشنبه 31 ماه پنجم سال 2014 و زمان ساعت 5 و 17 دقیقه
و 34 ثانیه بوده است.
دستور زیر را اجرا کنید:
systeminfo > C:\ABC.txt
حال اگر به درایو C رفته و فایل ABC.txt را باز کنید ، خواهید دید که داخل آن اطلاعات زیادی در رابطه با کامپیوتر شما
نوشته شده است.
یکی دیگر از این اپراتور ها NUL نام دارد که من یکی دو بار در مثال های گذشته از آن استفاده کردم و کسی سوالی
نپرسید یعنی اینکه تمام کسانیکه مثال های این تاپیک را دنبال کرده اند ،طرز استفاده از این اپراتور را میدانند.
بهر حال بحث این اپراتور ها را در اینجا تمام کرده و بقیه موارد مربوطه را بخودتان واگذار میکنم.
Magsoud
06-01-2014, 02:14 PM
نمیدانم تا کنون دقت کرده اید یا نه ، در همه ویندوز ها داخل پوشه Program Files پوشه ای بنام Common Files وجود
دارد.
حالا فرض کنیم که شما فایلی بنام xxx.exe دارید و میخواهید این فایل توسط یک فایل Batch ، به داخل همین پوشه
کپی شود. با روش هائیکه تاکنون یاد گرفته ایم ، مسلما" دستور زیر را بکار می برید:
Copy xxx.exe C:\Program Files\Common Files
حالا اگر دستور بالا را اجرا کنید فایل کپی نخواهد شد. دلیلش دو مطلب است:
1. فایل Batch نامی را که بین حروفش فاصله خالی باشد نمی شناسد.
2. فایل Batch موقع کار با نام هائیکه بیش از 8 کاراکتر داشته باشد مشکل دارد.
برای درک درست مطلب بجای دستور بالا دستورات زیر را اجرا کنید:
@ECHO OFF
Copy xxx.exe E:\Program Files\Common Files
pause
حال اگر فایل Batch را اجرا کنید خواهید دید که پیغام میدهد که . The syntax of the command is incorrect
می بینید که گفته دستور غلط است.ولی دستور غلط نیست بلکه همانگونه که گفتم فایل Batch نامی را که بین حروفش
فاصله خالی باشد نمی شناسد. و در مثال بالا بین Program و Files ( و همچنین مابین Common و Files ) فاصله خالی
وجود دارد که فایل Batch قادر به شناسائی آن ها نیست.
روش کار این است که در موارد اینگونه ، فرضا" در مثال بالا ، آدرس مورد استفاده را مابین علایم " " محصور کنیم.
یعنی برای مثال بالا باید دستور را بصورت زیر بنویسیم تا اجرا شود:
Copy xxx.exe "C:\Program Files\Common Files"
Environment Variables
=============
در بحث هایمان بویژه موقع کار با دستور Set با چند مورد استفاده از متغیر ها در برنامه نویسی با Batch آشنا شدیم. و در
اینجا بیشتر در اینمورد صحبت می کنیم.
متغیر ها دو نوع هستند یک نوع آن هائی هستند که خودمان تعیین میکنیم مثل مثال هائیکه موقع کار با دستور Set
دیدیم.
ولی نوع دیگری از متغیر ها هستند که در سیستم وجود دارند و فایل Batch آن ها را می شناسد و نیازی به معرفی
آن ها نیست. اینگونه متغیر ها را Environment Variables مینامند.برای درک بهتر این نوع متغیر ها به مثال زیر توجه
کنید.
دستور استفاده شده در مثال بالا روش درستی نیست. همانطور که قبلا" گفتم ، فایل Batch تعدادی متغیر سیستمی
را می شناسد . برای نمونه از نظر فایل Batch عبارت %COMMONPROGRAMFILES% مشابه آدرس گفته شده در بالا
یعنی ....\Program Files\Common Files می باشد
بصورت دیگر ما میتوانیم عوض استفاده از دستور طولانی بالا از دستور ساده زیر استفاده کنیم:
Copy xxx.exe "%COMMONPROGRAMFILES%"
متغیر استفاده شده در بالا یکی از متغیر های Environment Variables است.
یادگیری این متغیر ها در خیلی از موارد لازم است .اگر به مثال زیر دقت کنید مهم بودن یادگیری آن ها را متوجه خواهید
شد.
مثال:
فرضا" میخواهیم فایل xxx.exe را به داخل پوشه C:\Documents and Settings\{username}\Application Data
(در ویندوز XP) و یا معادلش پوشه C:\Users\{username}\AppData\Roaming در ویندوز 7 کپی کنیم.
در این جا دو مسئله مهم است که بدانیم:
1. لازم نیست که آدرس طویل بالا را استفاده کنیم . هم در ویندوز XP و هم در ویندوز 7 میتوانیم بجای آدرس های طویل
بالا از متغیری بنام %APPDATA% استفاده کنیم. یعنی با اجرای دستور زیر هم در ویندوز XP و هم در ویندوز 7 کار
مورد نظر ما انجام خواهد شد:
Copy xxx.exe "%APPDATA%"
2. اگر از متغیر نوع Environment Variables استفاده نکنیم ، بعضی مواقع حتی اگر فایل یا فایل ها به محل مورد نظر
کپی شوند ، باز هم برنامه ما کار نخواهد کرد . به مثال زیر توجه کنید:
فرضا" لازم است که برای اجرای یک برنامه ویژه ،فایل xxx.exe به داخل پوشه Windows کپی شود. برای اینکار در حالت
عادی ( بدون استفاده از متغیر نوع Environment Variables ) مسلما" دستور زیر را استفاده میکنیم:
Copy xxx.exe C:\windows
بله این فایل به پوشه C:\windows کپی خواهد شد.ولی مسئله مهمی این جا وجود دارد که کاربرد برنامه شما را
محدود میکند.چون این برنامه فقط برای کسانی درست کار خواهد کرد که ویندوزشان در درایو C نصب شده باشد.
کسان دیگری که ویندوزشان در درایو C نصب نیست (مثل بنده که ویندوزم در درایو E نصب هست ) ، نخواهند توانست
از برنامه مورد نظر استفاده کنند.
بنابر این با این روش فقط یک عده محدودی قادر به استفاده هستند یعنی برنامه شما نقص دارد.
پس چکار باید کرد؟
اینجاست که استفاده از متغیر های نوع Environment به درد میخورند. برای این مثال برای آدرس پوشه ویندوز یک
متغیر نوع Environment بنام %SystemRoot% و جود دارد که برای مثالمان میتوانیم بصورت زیر استفاده کنیم:
Copy xxx.exe %SYSTEMROOT%
خوبی این دستور این است که فایل Batch موقع اجرا وقتی به این متغیر میرسد دیگر مثل دستور بالا عمل نمیکند بلکه
اول نگاه میکند تا ببیند ویندوزی که استفاده میکنید در کدام درایو است و سپس فایل xxx.exe را به داخل پوشه ویندوزی
که در حال استفاده از آن هستید کپی میکند ، فرضا" در سیستم من آن را به آدرس E:\Windows کپی میکند.
اگر عمری باشد در جلسه بعد انواع متغیر های اینگونه را هم برای ویندوز XP و هم برای ویندوز 7 ارایه خواهم کرد.
Magsoud
06-01-2014, 04:46 PM
لیست تعدادی از متغیر های Environment Variables
1. در ویندوز XP
Few environment variables in Windows XP
================================================== ==============================
Environment Path
================================================== ==============================
%profiledir% C:\Documents and Settings\
--------------------------------------------------------------------------------
%ALLUSERSPROFILE% C:\Documents and Settings\All Users
--------------------------------------------------------------------------------
%DifaultUserProfile% C:\Documents and Settings\Default User
--------------------------------------------------------------------------------
%USERPROFILE% C:\Documents and Settings\{username}
--------------------------------------------------------------------------------
%APPDATA% C:\Documents and Settings\{username}\Application Data
--------------------------------------------------------------------------------
%HOMEPATH% \Documents and Settings\{username}
--------------------------------------------------------------------------------
%ProgramFiles% C:\Program Files
--------------------------------------------------------------------------------
%CommonProgramFiles% C:\Program Files\Common Files
--------------------------------------------------------------------------------
%HOMEDRIVE% Root Drive ,C:\
--------------------------------------------------------------------------------
%SYSTEMDRIVE% Moves to the Root drive , C:
--------------------------------------------------------------------------------
%SYSTEMROOT% C:\WINDOWS
--------------------------------------------------------------------------------
%WINDIR% C:\WINDOWS
--------------------------------------------------------------------------------
%TEMP% and %TMP% C:\DOCUME~1\{USER}\LOCALS~1\Temp
--------------------------------------------------------------------------------
%CD% Current working directory
--------------------------------------------------------------------------------
%CMDCMDLINE% Displays Windows Version
--------------------------------------------------------------------------------
%CMDEXTVERSION% Command prompt version
--------------------------------------------------------------------------------
%COMPUTERNAME% Equivalent to hostname command
--------------------------------------------------------------------------------
%COMSPEC% C:\Windows\System32\cmd.exe
--------------------------------------------------------------------------------
%DATE% Display current date
--------------------------------------------------------------------------------
%ERRORLEVEL% Exit code for the previously executed command
--------------------------------------------------------------------------------
%NUMBER_OF_PROCESSORS% Displays number of processors
--------------------------------------------------------------------------------
%OS% Displays the name of the OS installed
--------------------------------------------------------------------------------
%PATH% Points to C:\WINDOWS\system32
--------------------------------------------------------------------------------
%PATHEXT% .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS ; .WSF;.WSH
--------------------------------------------------------------------------------
%PROCESSOR_ARCHITECTURE% Displays the processor architecture
--------------------------------------------------------------------------------
%PROCESSOR_LEVEL% Displays the processor level
--------------------------------------------------------------------------------
%PROCESSOR_REVISION% Displays the processor revision
--------------------------------------------------------------------------------
%PROMPT% Displays the current prompt
--------------------------------------------------------------------------------
%RANDOM% Generates a random integer between 0 and 32767
--------------------------------------------------------------------------------
%TIME% Displays current time
--------------------------------------------------------------------------------
%USERDOMAIN% Displays the hostname
--------------------------------------------------------------------------------
%USERNAME% Displays the currently logged in user name
================================================== ==============================
2. در ویندوز 7
Windows 7 Environment Variables List
================================================== ===========================
Environment Variable Path
================================================== ===========================
%ALLUSERSPROFILE% C:\ProgramData
-----------------------------------------------------------------------------
%APPDATA% C:\Users\{username}\AppData\Roaming
-----------------------------------------------------------------------------
%COMMONPROGRAMFILES% C:\Program Files\Common Files
-----------------------------------------------------------------------------
%COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files
-----------------------------------------------------------------------------
%COMSPEC% C:\Windows\System32\cmd.exe
-----------------------------------------------------------------------------
%HOMEDRIVE% C:
-----------------------------------------------------------------------------
%HOMEPATH% C:\Users\{username}
-----------------------------------------------------------------------------
%LOCALAPPDATA% C:\Users\{username}\AppData\Local
-----------------------------------------------------------------------------
%PROFILESDIRECTORY% C:\Users
-----------------------------------------------------------------------------
%PROGRAMDATA% C:\ProgramData
-----------------------------------------------------------------------------
%PROGRAMFILES% C:\Program Files
-----------------------------------------------------------------------------
%PROGRAMFILES(X86)% C:\Program Files (x86) (only in 64-bit version)
-----------------------------------------------------------------------------
%PUBLIC% C:\Users\Public
-----------------------------------------------------------------------------
%SystemDrive% C:
-----------------------------------------------------------------------------
%SystemRoot% C:\Windows , %WINDIR%
-----------------------------------------------------------------------------
%TEMP% and %TMP% C:\Users\{username}\AppData\Local\Temp
-----------------------------------------------------------------------------
%USERPROFILE% C:\Users\{username}
-----------------------------------------------------------------------------
%WINDIR% C:\Windows , (%SYSTEMDRIVE%\Windows)
================================================== ===========================
Magsoud
06-02-2014, 12:56 AM
دستور FOR
======
این دستور ، دستوری بسیار مفید بوده و حداقل از نظر بنده کاربرد هایش خیلی بیشتر از اکثریت دستورات دیگر است.
متاسفانه خیلی از کاربران علاقمند دستورات Batch ، وقتی به این دستور میرسند ، با توجه به گستردگی کاربرد های
آن و عدم وجود یک آموزش مفصل و کافی در مورد آن ، نه تنها نمیتوانند آن را یاد بگیرند بلکه در کل از یادگیری دستورات
Batch ناامید شده و از خیر یاد گیری میگذرند. حتی خود بنده هم گاها" گیج چگونگی استفاده از این دستور می شوم.
من سعی میکنم در حد درک ناقص خود از این دستور ، پاره ای از کاربرد های آن را با مثال های واضح توضیح دهم. ولی
بدیهی است که فقط با مطالعه نمیتوان موفق شد ، این تمرین و تجربه هست که مهارت و تخصص و قدرت ایجاد میکند.
برای درک اولیه چگونگی کار این دستور ، به مثال زیر توجه کنید.
فرض کنید که میخواهیم توسط یک فایل Batch کاری کنیم که اعداد 1 تا 5 بترتیب نوشته شوند.ابتدائی ترین راه این
است که دستورات زیر را اجرا کنیم:
@ECHO OFF
echo 1
echo 2
echo 3
echo 4
echo 5
pause >nul
با اجرای دستوربالا پنجره ای مثل شکل زیر خواهیم داشت.
http://www.worldup.ir/images/ubct5uqou668cd87llty.png (http://www.worldup.ir/)
همانطور که می بینید برای نشانداده شدن اعداد 1 تا 5 در 5 سطر ،تعداد پنج سطر کد نوشتیم.
حالا فرض کنید که میخواهیم بجای اعداد 1 تا 5 ، اعداد 1 تا 100 بترتیب دیده شوند. معلوم است که اگر بخواهیم از
روش بالا استفاده کنیم باید تعداد 100 سطر کد بنویسیم.و همینطور الی آخر.
مطمئنا" قبول دارید که انجام این کار خیلی وقت گیر و خسته کننده بوده و فایل Batch ساخته شده هم بسیار طویل
خواهد شد.
با استفاده از دستور FOR انجام اعمال بالا خیلی راحت و سریع میشود برای مثال دستور زیر را اجرا کنید:
@ECHO OFF
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A
pause >nul
در دستور بالا برای نشان دادن اعداد 1 تا 10 را فقط از یک سطر دستور استفاده کردیم.
البته این ساده ترین روش اجرای دستور FOR است و ما با دستور های کوتاهتر دیگری هم میتوانیم این کار را انجام
دهیم که در موردشان صحبت خواهم کرد. ولی قبل از ورود به بحث های مربوطه ، لازم میدانم که در اینجا دستور بالا
را کاملا" تشریح کنم تا درک اولیه در مورد کاربرد های دستور FOR را بدست بیاوریم.
__ در ابتدای دستور یک سطری بالا اول کلمه FOR آمده است.
__ بعد از آن حرف A را بعنوان متغیر قرار داده ایم که در فایل Batch باید قبل از نام متغیر دوتا علامت %% را بگذاریم تا
فایل Batch بداند حرف A یک متغیر است. شما میتوانید بجای حرف A هر حرف دیگر دلخواهتان را قرار دهید.
__ بعد از نام متغیر داخل پرانتز اعداد 1 تا 10 را پشت سر هم و با یک فاصله قرار داده ایم. محتوای پرانتز ، لیست
(List) نامیده میشود.
__ بعد از پرانتز با یک فاصله دستور do قرار داده شده است
__ و در انتها دستور echo %%A نوشته شده است
حال ببینیم منظور از تک تک نوشته های بالا چیست.
با دستور بالا به FOR میگوییم که به داخل لیست (در این مثال اعداد داخل پرانتز ) نگاه کند سپس اولین موجودی لیست
(یعنی عدد 1 را در این مثال) در داخل متغیر A قرار داده و سپس بپرد و دستوری را که بعد از do نوشته شده اجرا کند.
در این مثال دستور عبارت از echo %%A است که عدد موجود در داخل متغیر A را نشان خواهد داد (که ما عدد 1 را
در صفحه خط فرمان خواهیم دید).
دستور FOR وقتی عمل بالا انجام شد دوباره به اول بر خواهد گشت. و کار را دوباره تکرار خواهد کرد با این فرق که این
دفعه عدد دوم از لیست یعنی عدد 2 را داخل متغیر A ذخیره خواهد کرد ... بعد ما عد 2 را خواهیم دید.
دستور FOR این عمل را تا آخرین موجودی لیست ( یعنی عدد 10 در این مثال) تکرار کرده و بعد بسته خواهد شد.
امیدوارم توانسته باشم طرز کار این دستور را درست و مفهوم تشریح کنم.
در جلسات بعد با نکات بیشتری آشنا خواهیم شد.
eDvArDo
06-02-2014, 12:15 PM
سلام
استاد عزيز قبلش از سوال پيشپا افتادهام عذرخواهي ميکنم!
با وجود استفاده از دستور pause، چرا پنجره بسيار سريع باز و بسته ميشه؟ (طوريکه محتواش خونده نميشه!)
درضمن چرا با وجود سرعت بيشتر در خوندن فرمت cmd که windows NTcommand Script هست از فرمت bat که MS-DOS Batch File هست استفاده ميشه؟
سپاس
Magsoud
06-02-2014, 02:17 PM
.....
1. با وجود استفاده از دستور pause، چرا پنجره بسيار سريع باز و بسته ميشه؟ (طوريکه محتواش خونده نميشه!)
2. چرا با وجود سرعت بيشتر در خوندن فرمت cmd که windows NTcommand Script هست از فرمت bat که MS-DOS Batch File هست استفاده ميشه؟
...
ادواردوی عزیز:
1. در پست شماره 8 عرض کردم:
__ یک فایل Batch باید دارای پسوند bat باشد ولی اگر در ویندوز بجای پسوند bat از پسوند cmd استفاده کنید ، فایل
Batch بهتر و سریعتر کار خواهد کرد.
2. این عیب که با وجود بودن دستور pause باز هم صفحه خط فرمان دیده نشده و بسرعت بسته میشود به چند عامل بستگی دارد:
_ نوشته های شما در داخل فایل Batch اشکال دارد.
__ یک عاملی در سیستم شما باعث عدم اجرای دستور میشود.
_...
بهر حال یک راه برای مشاهده دستورت بالا این است که وارد خط فرمان ویندوز شده و سپس دستور بالا را با مختصر
تفاوت زیر وارد کرده و سپس کلید Enter را فشار دهید:
for %A in (1 2 3 4 5 6 7 8 9 10 ) do echo %A
اگر توجه کرده باشید در فایل Batch از علامت %% برای متغیر استفاده کردیم ولی در خط فرمان باید از علامت % استفاده شود.
البته در این روش هم دستورات اجرا شده را خواهید دید و هم نتیجه یعنی نشان داده شدن اعداد را.
راه دیگر این است که فایل Batch (مثلا" xx.cmd ) را در روت درایو فرضا" D قرار داده و سپس در خط فرمان ویندوز دستور زیر را تایپ
کرده و کلید Enter را بزنی:
D:\xx.cmd
نتیجه بشکل زیر خواهد بود:
http://www.worldup.ir/images/ajr6hekflysg0naix5.png (http://www.worldup.ir/)
راه دیگر این است که یک فایل Batch با دستور زیر اجرا کنید که پس از اجرا خواهید دید فایلی بنام aaa.txt در کنار فایل Batch ساخته
شده که در داخلش اعداد 1 تا 10 نوشته شده است:
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A >>aaa.txt
لطفا" نتیجه کار را اعلام فرمائید
eDvArDo
06-02-2014, 08:33 PM
سلام
ادواردوی عزیز:
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/)
راه دیگر این است که فایل Batch (مثلا" xx.cmd ) را در روت درایو فرضا" D قرار داده و سپس در خط فرمان ویندوز دستور زیر را تایپ
کرده و کلید Enter را بزنی:
D:\xx.cmd
نتیجه بشکل زیر خواهد بود:
http://www.worldup.ir/images/ajr6hekflysg0naix5.png (http://www.worldup.ir/)
اينم عکسش:
http://www.filedoon.ir/upload/l5h6_commandprompt2.png (http://www.filedoon.ir/)
راه دیگر این است که یک فایل Batch با دستور زیر اجرا کنید که پس از اجرا خواهید دید فایلی بنام aaa.txt در کنار فایل Batch ساخته
شده که در داخلش اعداد 1 تا 10 نوشته شده است:
کد:
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A >>aaa.txt
متاسفانه توليد نشد!
سپاس
Magsoud
06-03-2014, 12:14 AM
ادواردوی عزیز:
فایل با پسوند 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 (http://www.worldup.ir/)
در ضمن با دیدن تصویر بالا من به این نتیجه میرسم که شما فایل Batch را در Notepad با نوع UTF-8 ذخیره کرده اید که
توانسته اید علامت غیر قابل اجرا با Batch را تایپ و ذخیره کنید.
http://www.worldup.ir/images/25zhvgdohijmlq4vfwo8.png (http://www.worldup.ir/)
اگر نتوانستی مسئله را حل کنی ، لطفا" فایل خودت (eDvArDo.cmd ) را برایم آپلود کن.
من نمیدانم چرا در سیستم شما فایل های Batch اجرا نمیشوند سعی میکنم علت را جستجو کرده و اگر پیدا کنم اطلاع خواهم
داد.
Magsoud
06-03-2014, 01:51 AM
در مثال جلسه قبلی یک فایل 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 را اجرا کند.
منظور اصلی بنده از گفتن این نکات این است که دستورات وظایف مشخصی دارند ولی این هوش و استعداد کاربر است
که میتواند از این دستورات کار های متفاوت بکشد.
امروز در تهران باد بسیار شدید و وحشتناکی بمدت چند ساعت وجود داشت که طبق معمول برق کل منطه ما و حداقل چند منطقه
اطرافمان قطع شد
و بعد از پایان یافتن طوفان ،
ساعت ها طول کشید تا برق وصل شود و لذا دسترسی به کامپیوتر نداشتم که مطالب بیشتری بنویسم
تا بعد اگر عمری باشد ، طوفانی نباشد و برق داشته باشیم
eDvArDo
06-03-2014, 09:36 AM
سلام
استاد عزيز، متن اون فايل عين دستوريه که شما گذاشتيد، آخه کپي پيست کردم!
پيوست شد
برای مثال محتوای فایل Batch بالا را با دستورات زیر عوض کرده و سپس اجرا کنید:
@echo off
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do notepad
خواهید دید که با اجرای آن ، اول برنامه Notepad اجرا خواهد شد. حالا برنامه Notepad را ببندید ، خواهید دید که مجددا"
برنامه Notepad اجرا خواهد شد (برای بار دوم ). حال اگر دوباره برنامه Notepad را ببندید برای بار سوم اجرا خواهد شد.
و همینطور الی آخر . یعنی برنامه Notepad به تعداد 10 بار (به تعداد موجودی داخل پرانتز) اجرا خواهد شد.
اين يکي هم اجرا نشد!!!
ميدونم ايراد از سيستم منه، راستي استاد اين دستورات توي همه ويندوزها يه جوره و قابل اجراست؟
سپاس
Magsoud
06-03-2014, 04:19 PM
ادواردوی عزیز
فایل های شما در سیستم بنده هم اجرا نمیشوند. ولی:
حالا این فایل پیوست را هم اجرا و نتیجه را اعلام کن
eDvArDo
06-03-2014, 05:15 PM
سلام
عجيبه! همون دستوره ولي فايلي که شما پيوست کرديد، اجرا شد! :tajob::blink2::fkr::naboodam::ghati:
چرا؟!
سپاس
Magsoud
06-03-2014, 05:43 PM
ادواردوی عزیز
فکر میکنم که شما برنامه Notepad خود را بطریقی تنظیم کرده اید که فایل ها را بصورت Unicode ذخیره میکند
ولی فایل های Batch را بهتر است نوع ANSI ذخیره نمائید.
من در فایل پیوست بالا که همان فایل شماست همین کار را انجام دادم.
Magsoud
06-03-2014, 11:55 PM
بد ندیدم که یک مثال دیگر در رابطه با دستوری که مطالعه کردیم را داشته باشیم.
فایل 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 آشنا کنم ولی دیگر سن و حوصله ام توان ادامه این
مبحث را نمیدهند لذا حالا که مقدمات را فهمیدید بقیه راه به همت خودتان بستگی دارد.
موفق باشید.
eDvArDo
06-04-2014, 11:12 AM
سلام
سپس مقایسه میکند که ببیند آیا مجموع این دو عدد ( یعنی عدد 2 ) نسبت به سومین عدد داخل پرانتز ( یعنی عدد 10
در این مثال ) ، چه حالتی دارد.
فکر ميکنم منظورتون همون عدد 100 بوده که درست تايپ نشده.
حالا:
1- استاد عزيز، اگه نمايش اعداد برعکس باشه، يعني از 100 به 1 با گامهاي 2تايي اونوقت دستور چطور نوشته ميشه؟
ميدونم که اعداد اول و سوم (آغازين و پاياني) جاشون عوض ميشه ولي با چه سوييچي ويا به چه عبارت و دستوري "کنترل کم شدن" (گامهاي کاهشي) انجام ميگيره؟
2- درضمن اگه بخواهيم نمايش اعداد "مابين" اعداد آغازين تا پاياني انجام بگيره، دستور چطور ميشه؟
3- نمايش اعداد اگه بجاي ستوني، پشتسر هم و سطري بشه (مثلاً با دو فضاي خالي)، دستور چطور خواهد بود؟
سپاس
Magsoud
06-04-2014, 02:40 PM
با دستور زیر اعداد مابین 100 تا 10 بطور معکوس وبصورت (100 ، 98 ، 96 و....) نشان داده خواهند شد در اینجا در داخل پرانتز
عدد شروع 100 انتخاب شده لذا از عدد 100 شروع میکند ، عدد Step -2 انتخاب شده یعنی در هر دور باید دو تا کم شود:
@echo off
FOR /L %%A IN (100,-2,10) DO (
ECHO %%A
)
pause >nul
Magsoud
06-06-2014, 03:02 AM
......
3- نمايش اعداد اگه بجاي ستوني، پشتسر هم و سطري بشه (مثلاً با دو فضاي خالي)، دستور چطور خواهد بود؟
....
شرح جواب این سوال شما خیلی سخت است و لذا چیزی نگفتم ولی بهر حال دستور زیر را اجرا کنید:
@echo off
FOR /L %%A IN (1,1,10) DO (
echo|set /p=%%A-
)
pause >nul
بصورت زیر نشان داده خواهد شد:
http://www.worldup.ir/images/8gyvht49igebdi8sui1c.png (http://www.worldup.ir/)
eDvArDo
06-06-2014, 10:25 AM
سلام
فايل پيوست!
درود
Magsoud
06-06-2014, 01:38 PM
خوشحالم که درست متوجه شدی
البته بهتر بود بطریق فایل پیوست عمل میکردی
http://www.worldup.ir/images/5zg5achtg180oxemk2sj.png (http://www.worldup.ir/)
استاد اگر بخواهیم توسط دستور کپی دستور دهیم فایل بچ 2تا فایل یکی فایل exe ویکی فایل text رو در Program Files ودر داخل یک فولدری کپی کند اما در اونجا این دوتا وجود دارند وما بخواهیم این دوتا فایل را روی قبلی ها کپی و replace کند دستور به چه شکلی خواهد بود
Magsoud
06-09-2014, 08:26 PM
اگر دستور copy را بهمراه سویچ y/ استفاده کنی فایل های موجود را overwrite خواهد کرد یعنی فایل های موجود را پاک کرده و
فایل های شما را بجای آن ها خواهد گذاشت.
Magsoud
06-11-2014, 02:52 PM
خواستن پسورد ( Pasword) داخل فایل Batch
===========================
گرچه این نوع پسورد گذاری اصلا" امنیت ندارد ولی صرفا" بخاطر اینکه یک تمرین کار با فایل های Batch داشته باشیم
توضیح میدهم.
فایل Batch با محتوای زیر را درست کرده و آن را در دسکتاپ خود با نام pass.cmd ذخیره نمائید:
@echo off
:start
SET /p X="Enter Password "
IF %X%==Magsoud GOTO OK
cls
echo.
echo.
echo ====================================
echo.
echo You have enterd wrong Password
echo.
echo Please try again
echo.
echo ====================================
echo.
echo.
GOTO start
:OK
CALC.EXE
goto end
:END
حال اگر این فایل را اجرا کنید ( در ویندوز 7 و ببعد با اجازه کاربری ادمین) ، پیام خواهد داد : Enter Password
یعنی پسورد را وارد کنید.
حالا اگر پسورد را که عبارت Magsoud است وارد کنید ، برنامه ماشین حساب اجرا خواهد شد. ولی اگر هر عبارت
دیگری بغیر از عبارت Magsoud وارد کنید ، پیام داده خواهد شد که پسورد غلط است دوباره وارد کنید.
استاد دوتا سوال داشتم البته شاید خنده دار باشه اما به ذهنم رسیده بپرسم
اگر بخواهیم فایل بچی درست کنیم که دستور بدیم در داخل یک سی دی یا یک فولدر که چندین وچند فایل وفولدر وجود دارده بگرده وفایلهایی که مثلا با نامxxx وبا فرمت text هستند رو در جایی کپی وریپلیس کنه هر تعداد که باشه دستور به چه شکلی خواهد بود ودوم اینکه دستور بالا فقط فرقش این باشه که بجای ریپلیس کپی و نام گذاری مجدد کنه ایا این چنین دستوراتی هست یا اصلا نمیشه اینچنین دستوراتی نوشت
Magsoud
06-11-2014, 05:00 PM
سهند عزیز ،
بله ما براحتی میتوانیم یک فایل Batch اجرا کنیم که برود و از داخل سی دی مورد نظر ما کاری را انجام دهد.
که برای اینکار باید:
1. در اول فایل Batch دستوراتی وارد کنیم که توسط آن دستورات ، فایل Batch قادر باشد که سی دی مورد نظر ما را
شناسائی کند
2. دستوراتی را که در رابطه با محتوای موجود در سی دی لازم داریم می نویسیم.
اگر سوالات خودتان را یکی یکی و واضح و با مثال شرح دهید ، جواب راحت تر است.
Magsoud
06-11-2014, 09:44 PM
در تکمیل پست بالا مثالی را شرح میدهم.
روشی که توضیح خواهم داد روشی هست که سال ها پیش موقعیکه میخواستم یک سی دی سفارشی ویندوز XP
درست کنم بکار می بردم.
فرض کنید که یک سی دی برنامه داریم و الان آن را داخل CDROM قرار داده ایم که درایو مثلا" G نشان داده می شود .
باز هم فرض کنیم که در روت این سی دی پوشه ای بنام XXX وجود دارد که داخلش تعدادی برنامه وجود دارند.
حالا میخواهیم یک فایل Batch درست کنیم که با اجرای این فایل Batch در دسکتاپ ، برنامه های داخل پوشه XXX
از داخل سی دی ، بترتیب شروع به نصب شوند.
انجام این کار در حالت فرض شده بسیار کار آسان و ابتدائی هست. برای اینکه ما آدرس را میدانیم و خیلی راحت
میتوانیم اینکار را انجام بدهیم . مثلا" اگر در فایل Batch دستور زیر را بنویسیم ، برنامه ABC.exe که داخل پوشه XXX
درون سی دی قرار دارد شروع به نصب خواهد کرد:
G:\XXX\ABC.exe
ولی این عمل فقط در شرایط بالا و فقط در کامپیوتر ما انجام خواهد گرفت و در اکثر موارد دیگر کار نخواهد کرد.
علت مشکل این است که در این مثال در کامپیوتر ما ،درایو CDROM عبارت از G بود و ما هم دستور را برای درایو G
داده ایم.
ولی حالا اگر دوستمان ، همین سی دی را در کامپیوترش بگذارد ، ممکن است درایو سی دی رامش E ، F ، H و یا
هر درایو دیگری باشد.اکنون اگر دوستمان هم فایل Batch ما را اجرا کند ، دیگر کار نخواهد کرد.
پس چکار باید کرد تا فایل Batch ما در کامپیوتر همه کار کند؟
ما باید یک فایل Batch بسازیم که در همه کامپیوتر ها یکسان کار کند.
ما باید کاری کنیم که فایل Batch ما موقع اجرا ، اول درایو CDROM را شناسائی کرده و سپس کارش را انجام دهد.
چگونگی کار را در جلسه بعد توضیح خواهم داد.
چون الان از یک طرف صدای عظیم جارو برقی و از طرف دیگر غر غر های
رئیس کلمان که میگوید : تمام کارش شده خانه نشینی و کامپیوتر و و......اعصابم را بهم ریخته.
رئیس کلمان که میگوید : تمام کارش شده خانه نشینی و کامپیوتر و و......اعصابم را بهم ریخته.
استاد منم با شما همدردم ::w8::sar3::ka5:ugly004
Magsoud
06-12-2014, 01:43 AM
در جلسه قبل گفتم که ما باید کاری کنیم که فایل Batch موقع اجرا ، اول درایو CDROM را شناسائی کرده و سپس
کارش را انجام دهد.
با یک کلک ساده و ابتدائی ، فقط با نوشتن یک سطر دستور ، میتوانیم کاری کنیم که فایل Batch فوری سی دی ما را
شناسائی بکند.چون ممکن است این مطلب مقداری گیج کننده باشد ، لذا برای درک درست مطلب با دقت به شرح
زیر توجه فرمائید:
__ در یک کامپیوتر حداکثر چند تا درایو می توانیم داشته باشیم؟
جواب معلوم است : به تعداد حروف الفبای انگلیسی ، یعنی 26 درایو .چون درایو های کامپیوتر از حرف A شروع شده
و با حرف Z تمام می شوند.
تا اینجا ما باید به فایل Batch بگوئیم که بایستی درایو CDROM را بین 26 حرف بگردد.(چگونگی گشتن را بعدا" توضیح خواهم داد).
__ در تمام کامپیوتر ها حروف A و B مخصوص درایو فلاپی است و ما هم که نمیخواهیم دنبال درایو فلاپی بگردیم.لذا لازم
نیست که فایل Batch دنبال 26 حرف بگردد بلکه تا اینجا باید بین 24 حرف (حروف C تا Z ) بگردد.
__ هر کامپیوتری حداقل یک هارد دارد و هر هارد حداقل یک پارتیشن دارد. هاردی که فقط یک پارتیشن دارد ، نام اولین
حرف بعد از فلاپی یعنی حرف C را به خودش اختصاص می دهد. بنابراین فایل Batch ما نباید دنبال حرف C هم بگردد
پس تا اینجا باید به فایل Batch بفهمانیم که درایو CDROM را بین 23 حرف (حروف D تا Z ) بگردد.
اگر تا اینجای مطلب را درست متوجه شدید ، حالا وقت آن است که این موضوع را به فایل Batch هم بفهمانیم.
اینکار واقعا" ساده است و فایل Batch با دیدن یک سطر دستور منظور ما را فهمیده و در چند لحظه درایو CDROM را
شناسائی و پیدا خواهد کرد.
ما در اینجا از دستور FOR استفاده خواهیم کرد که اگر مطالب گفته شده در باره این دستور را درست مطالعه کرده
باشید ، خواهید دید که خیلی راحت است.
همراه دستور FOR از یک کلک ویژه استفاده خواهیم کرد تا فایل Batch بتواند منظور ما را انجام دهد.
به مثال زیر توجه فرمائید:
فرضا" ما میخواهیم یک سی دی درست کنیم و داخلش برنامه های متفاوتی قرار دهیم .و فرضا" در داخل این سی دی
یک پوشه بنام XXX داریم که داخلش فایل های AAA.exe و BBB.exe و CCC.exe وجود دارند .
ما میخواهیم یک فایل Batch درست کنیم که اگر پس از گذاشتن سی دی در سی دی رام ، این فایل Batch را اجرا
کنیم ، برود وارد همین سی دی شود و سپس بترتیب فایل های موجود در داخل پوشه XXX را اجرا کند.
خب ، حالا ممکن است ما همزمان دو تا سی دی در کامپیوترمان باشد ، حالا فایل Batch از کجا باید بداند که باید داخل
کدام سی دی وارد شود؟
اینجاست که ما همان کلک ویژه را که گفتم انجام میدهیم:
برنامه notepad را باز کنید و بعد بدون اینکه حتی چیزی در آن تایپ کنید آن را با نام CD.txt ذخیره کرده و سپس این
فایل را در روت سی دی خود قرار دهید.
حال فایل Batch با محتوای زیر را درست کرده و آن را هرجائی مثلا" در دسکتاپ با هر نامی مثلا" Run.cmd ذخیره کنید:
@echo off
FOR %%i IN (D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST %%i:\CD.txt SET CDROM=%%i:
%CDROM%\XXX\AAA.exe
%CDROM%\XXX\BBB.exe
%CDROM%\XXX\CCC.exe
اگر سی دی با مشخصات گفته شده در بالا را داخل کامپیوتر گذاشته و سپس فایل Batch بالا را اجرا کنید ، در عرض
چند لحظه ، فایل Batch سی دی رام را پیدا کرده و سپس فایل های گفته شده در بالا را از داخل پوشه XXX اجرا
خواهد کرد.
اگر فکر میکنید که دستور بالا مقداری گنگ است یادداشت بگذارید تا شرح دهم.
Magsoud
06-12-2014, 06:19 PM
ادواردوی عزیز ، انگار شما تنها کسی هستید که بطور کامل این تاپیک را دنبال میکنید
Magsoud
06-14-2014, 09:33 PM
کاربردی از دستور net user
================
با استفاده از دستور net user بسادگی میتوانید در چند لحظه پسورد کاربر را در ویندوز های XP و 7 تغییر دهید.
فرضا" با اجرای دستور زیر پسورد کاربر به a1b2c3 تغییر پیدا خواهد کرد:
@Echo off
net user %USERNAME% a1b2c3
یعنی در ری استارت بعدی اگر کاربر پسورد a1b2c3 را وارد نکند ، نمی تواند وارد شود.
استاد اگر کاربر کامپیوتر پسورد نداشته باشد بازهم با اجرای این فایل پسورددار میشود
Magsoud
06-14-2014, 09:55 PM
بله
در حقیقت با دستور بالا به کاربر فعلی پسورد داده می شود.
ببخشید استاد من یه مشکلی در مورد یه نرم افزار داشتم که دستوراتش به نظرم ربطی به این تاپیک داره و سوالمو در اینجا مطرح کردم من مشکلمو که در عکس زیر اونا رو رنگی کردم میخواستم ببینم که اون5تا چه فرقی باهم دارند ومن اگه بخوام که مشخص کنم یوزری که موقع نصب به کامپیوتر میدیم هر یوزری که ما انتخاب کنیم بین اینها کدوم هستش
http://8pic.ir/images/dm953n9193kvhjbup1dj_thumb.jpg (http://8pic.ir/viewer.php?file=dm953n9193kvhjbup1dj.jpg)
Magsoud
07-21-2014, 02:45 AM
نمیدانم که از چه نرم افزاری استفاده می کنید که خیلی از موارد را که مثل هم نیستند ، یکی میداند.
بهر حال در ویندوز 7 بشرح زیر است:
%HOMEDRIVE% = C:
%HOMEPATH% = C:\Users\{username}
%USERPROFILE% = C:\Users\{username}
استاد این قسمتی از نرم افزار win toolkit هستش به نام addon maker که روشی برای ساخت نرم افزار با فرمت ویژه win toolkit میباشد من با دستور شما در پست بالا هم تست کردم اما همشونو در یوزر Default کپی میکنه به نظرتون مشکل چیه که یوزر ساخت من رو نمیشناسه ((home))
Magsoud
07-21-2014, 04:47 PM
من علت را نمیدانم و فقط میتوانم بگویم:
1. درست نیست که نام User را عباراتی از قبیل Home انتخاب کنیم. چون این اسامی جزو نام های رزو شده سیستم هستند
و ممکن است اشکال ساز شوند. و حتی ممکن است که همین مسئله باعث ایجاد مشکل در سیستم شما میشود.
2. مورد بالا را رعایت کرده و نام دیگری برای User انتخاب کن ( مثلا" Sahand ) ودوباره امتحان کن.
3. دقیقا" بگو که چه چیزی را میخواهی در پوشه کاربر قرار دهی شاید روش دیگری بتوانیم پیشنهاد بکنیم.
استاد من یوزر کامپیوتر رو طبق دستور شما به sahand تغییر دادم ولی در درایو ویندوز اسمی از یوزر انتخابی من نیست 4تا یوزر هست که در عکس گذاشتم ایا در این عکس که یوزری با نام home هستش همون یوزر قبلی من هست یا چیز دیگری هست واینکه چرا در فولدر یوزرها اسمی از یوزر الان من که sahand هستش نیست
http://8pic.ir/images/rkb9drxly9a5k60ix6vy_thumb.jpg (http://8pic.ir/viewer.php?file=rkb9drxly9a5k60ix6vy.jpg)
Magsoud
07-21-2014, 07:43 PM
با نگاه کردن به تصویری که شما نشان دادید می بینیم که کاربری بنام SandS اضاف شده است که در مشخصاتش
معلوم کرده که این کاربر در تاریخ همین امروز 21 / 07 /2014 درست شده است.
مطمئن هستید که این همان کاربر جدیدی نیست که درست کرده اید؟ که اشتباها" بجای sahand عبارت SandS
را تایپ کرده اید؟
نه استاد یه عکس از اکانت کاربریم گرفتم وسیستم رو دوباره ریستارت کردم اما توی یوزرها با همون نام ذخیره شده و در داخلش چیزی نیست
http://8pic.ir/images/bqc0trhfiwlagh89kjp7_thumb.jpg (http://8pic.ir/viewer.php?file=bqc0trhfiwlagh89kjp7.jpg)
Magsoud
07-21-2014, 08:17 PM
واقعا" دیگر نمیدانم مشکل چیست.
استاد من فولدر یوزرها رو با یه ویندوز اورجینال ((این ویندوز رو munt کردم ))مقایسه کردم که در عکس زیر مشاهده میکنید میخواستم ببینم که یوزر home در ویندوز من از کجا اومده ایا این همون نام کاربری قبلیم هست که تغییر پیدا نکرده یا جزو یوزرهای اصلی ویندوز هست واگر هست چرا در عکس دوم نیست و دوم اینکه در ویندوز اورجینال یوزر administrator چیه وایا این یوزر در هنگام نصب ویندوز با انتخاب ما نامش به یوزر کاربریمون تغییر خواهد کرد
http://8pic.ir/images/5vhuatb3h82b4kams9aw_thumb.jpg (http://8pic.ir/viewer.php?file=5vhuatb3h82b4kams9aw.jpg)
http://8pic.ir/images/86zosy1iq0iuqii5o4sx_thumb.jpg (http://8pic.ir/viewer.php?file=86zosy1iq0iuqii5o4sx.jpg)
Magsoud
07-22-2014, 12:02 AM
در ویندوز اوریجینال کاربری بنام Home وجود ندارد. حالا یا خودتان این کاربر را درست کرده اید یا ویندوزی که استفاده
میکنید قبلا" دستکاری شده و سازنده کاربری بنام Home درست کرده است.
اما در رابطه با کاربر Administrator ، این کاربر در ویندوز وجود دارد ولی در حالت عادی غیرعملیاتی (Disabled ) بوده
و دیده نمیشود.
راه دارد که عملیاتی اش بکنیم تا خودش را نشان دهد. که در این مورد در لینک زیر توضیح داده ام:
اجازه کاربری Admin در ویندوز های بعد از XP (http://ariadl.ir/thread167960.html#post329511)
Magsoud
10-01-2014, 12:15 AM
گاهی لازم دارید که از کل رجستری سیستمتان یک Backup تهیه کنید.
میتوانید براحتی اینکار را بصورت گرافیکی انجام دهید ولی آن دسته از
دوستانی که به کار با خط فرمان ویندوز علافمند هستند، میتوانند با
اجرای فایل Batch با محتوای زیر ، اینکار را بطور اتوماتیک انجام دهند:
@ECHO OFF
ECHO.
ECHO Creating Registry Backup...
REGEDIT /E "Full Registry Backup.reg"
PAUSE
فایل Batch با محتوای بالا را با نام فرضا" Backup Registry.bat در جائی
ذخیره کرده و اجرا کنید.
عمل بک آپ شروع شده و چند لحظه بعد خواهید دید که فایلی با نام
Full Registry Backup.reg در کنار فایل Batch درست شده است.
سلام
استاد در اکثر فایلهای بچ از علامتی استفاده میشود که معمولا در ابتدا وانتهای دستور یا در وسط دستورات هستش میخواستم ببینم این به چه معنی میباشد وکجاها کاربرد دارد یعنی کجاها باید بکار ببریم
xxx"
"xxx
"x"x
دوم اینکه ((اسلش)) و ((بک اسلش)) در کجاها بکارمیبریم منظورم تفاوت عملکرد این دو میباشد
eDvArDo
10-01-2014, 01:09 PM
سلام
استاد هميشه در ذهنم اين سوال بود که اگه توسط نصب يک برنامه و يا يک ويروس، چيزي به رجيستري "اضافه" بشه و ما بکآپ رجيستري سالمرو برگردونيم، آيا قسمتهاي اضافه شده هم پاک خواهند شد؟ يا اينکه تمام کليدهاييکه در بکآپ بودند بازيابي ميشن؟
يعني قبل از بازگرداني رجيستري کاملاً پاک ميشه يا اينکه کليدهاي رجيستري بکآپ به زمان بکآپ گيري برگشته و کاري به اضافات نداره؟!
سپاس
Magsoud
10-01-2014, 02:36 PM
...در اکثر فایلهای بچ از علامتی استفاده میشود که معمولا در ابتدا وانتهای دستور یا در وسط دستورات هستش میخواستم ببینم این به چه معنی میباشد وکجاها کاربرد دارد یعنی کجاها باید بکار ببریم
xxx"
"xxx
"x"x
دوم اینکه ((اسلش)) و ((بک اسلش)) در کجاها بکارمیبریم منظورم تفاوت عملکرد این دو میباشد
1. دستورات خط فرمان نمیتوانند نام هائی را که بین حروفشان فاصله وجود دارد شناسائی کنند.برای مثال در روت درایو
C یک پوشه با نام AAA BBB درست کرده و فایلی فرضا" notepad.exe را درون آن کپی کنید.
حالا یک فایل Batch با محتوای زیر درست کرده و آن را با نام Run.cmd در دسکتاپ ذخیره کنید:
C:\AAA BBB\notepad.exe
حال اگر فایل Run.cmd را اجرا کنید ، کاری انجام نخواهد شد.
علت این است که در آدرس بالا مابین حروف نام پوشه (بین حروف AAA و BBB) فاصله وجود دارد و این دستور فاصله را نمیتواند
شناسائی کند. در نتیجه کار نخواهد کرد.
در اینگونه موارد باید دستور را مابین علایم " " بنویسید تا اجرا شود .یعنی مثال بالا را بصورت زیر می نویسیم:
"C:\AAA BBB\notepad.exe"
2. در دستورات خط فرمان موقع مشخص کردن آدرس ، همانطوریکه در مثال بالا دیدید، از علامت \ استفاده می شود.
ولی علامت / علامتی هست که سویچ های خط فرمان با این علامت مشخص میشوند.
هميشه در ذهنم اين سوال بود که اگه توسط نصب يک برنامه و يا يک ويروس، چيزي به رجيستري "اضافه" بشه و ما بکآپ رجيستري سالمرو برگردونيم، آيا قسمتهاي اضافه شده هم پاک خواهند شد؟ يا اينکه تمام کليدهاييکه در بکآپ بودند بازيابي ميشن؟
يعني قبل از بازگرداني رجيستري کاملاً پاک ميشه يا اينکه کليدهاي رجيستري بکآپ به زمان بکآپ گيري برگشته و کاري به اضافات نداره؟!
متاسفانه موقع Restore کردن بکآپ رجستری دو کار انجام خواهد شد:
1. قسمت هائی از رجستری که در حال حاضر در حال استفاده باشند ، تغییر نخواهند کرد.
2. اگر توسط یک ویروس کلید هائی به رجستری اضافه شده باشد ، بعد از اجرای فایل بکآپ رجستری ، قسمت های
اضافه شده توسط ویروس همچنان باقی خواهند ماند.
تنها راه این است که خود فایل های اصلی رجستری تعویض بشوند که هم خیلی سخت است و هم ممکن است باعث
خرابی ویندوز شوند.
استاد یه سوالی برام پیش اومده واون اینکه محدود کاربرد فایلهای (bat) بهتر وبیشتره یا فایلهای (cmd) و تفاوتشون در چیه وهرکدام در کجاها کاربرد داره
Magsoud
10-12-2014, 01:51 PM
در سیستم عامل DOS و ویندوز های 98 و ME ، دستورات خط فرمان را فایلی بنام Command.com اجرا میکرد.
بعد از ویندوز های 98 و ME برای اجرای دستورات خط فرمان دستور دیگری بنام cmd.exe به ویندوز اضافه شده و
از همان زمان بجای bat از cmd استفاده شد.
از لحاظ عملی فرق زیادی بین bat و cmd وجود ندارد ولی بهر حال مختصر تفاوت هائی هم با هم دارند.
در هر صورت استفاده از پسوند cmd درست تر و بهتر است.
اگر نیاز به توضیحات بیشتری بود یادداشت بگذارید تا عرض کنم.
SetupEditor
10-26-2014, 06:55 PM
با سلام و درود بر اساتید و عزیزان
دستوری وجود داره تا از طریق داس درب رایتر را باز و بسته کنه !
درایو مربوط به فلش مموری یا درایوهای فعال را شناسائی کنه !
چگونه متغیرهای رجیستری را در داس بدون استفاده از نرم افزار ایجاد کنیم ؟
دستوری که مثلاً اگه ویندوز ایکس پی بود فلان کار و اگر سون بود کاری دیگه انجام بده
Magsoud
10-26-2014, 10:42 PM
من نمیدانم چرا سوالت دررابطه با دستورات DOS است.
اگر منظورت همان استفاده از فایل Batch است ، بیشتر سوالاتت جواب دارد.
با سلام دوباره
من میخواستم توسط دستورات این تاپیک یکسری اپهایی که در ویندوز10 هستند رو حذف کنم البته موقع نصب ویندوز توسط فایل ستاپ کمپلت
ولی نتونستم
اپهایی مثل اسکایپ یا غیره که در منوی استارت هستند همشون توسط یک فایلی در هنگام نصب حذف بشند توسط دستوری که داخل فایل ستاپ کمپلت مینویسیم ممنون میشم راهنمایی کنید وباتوجه به تحقیقاتی که کردم اینا با دستورات پاور شل حذف میشوند البته درحالت ادمین میخواستم ببینم این دستورات به چه نحوی باید بنویسسم تا این اپها حذف نصب شوند ممنون
Magsoud
12-11-2015, 02:12 PM
من ویندوز 10 استفاده نمیکم ولی چون ترکیب ویندوز های مایکروسافت از ویندوز ویستا تا ویندوز 10 تقریبا"
یک روند را ادامه داده ، لذا فکر میکنم که بتوانید با روش زیر مشکل را حل کنید:
عوض اینکه دستورات مربوط به حذف محتویاتی از منوی استارت را در دستور setupcomplate قرار دهید، بهتر
است این دستورات را مجزا در یک فایل Batch نوشته و سپس ایمیج ویندوز 10 را mount کرده و این فایل Batch
را در پوشه Startup قرار دهید.
با این کار بعد از اولین لاگ آن این فایل اتوماتیک اجرا شده و کار های مورد نیاز شما انجام خواهد شد.
فراموش نکنید که که انتهای دستورات این فایل Batch دستور بدهید که فایل Batch در انتها خودش را Delete کند
استاد یه سوال دیگه داشتم
ما دوتا فایل بچ داریم مثلاx1 و x2
میخواهیم که وقتی فایل x1 کارش رو تمام کرد x2 شروع به اجرا شود طوری که این دستور در داخل فایل x1 نوشته شود وبعد اتمام کار x1 فایل بچ x2 شروع شود
این دستور به چه شکلی خواهد بود واینکه اگر بخواهیم همه دستورات داخل فایلهای بچ با کاربری ادمین اجرا شوند چجوری باید بنویسیم
Magsoud
12-12-2015, 11:18 PM
چشم ، امشب مهمان دارم و نمیتوانم مطالب را دسته بندی کنم ولی سعی میکنم اگر عمری باشد فردا پاسخ دهم.
Magsoud
12-13-2015, 04:54 PM
اجرای یک فایل بچ توسط فایل بچ دیگر
================
اینکه از داخل یک فایل Batch فایل Batch دیگری را اجرا کنیم ، کار راحتی هست ولی این مسئله بسته
به نوع نیاز های ما فرق داشته و باید بر اساس نیاز ما به روش های مختلفی انجام بگیرد.
فرضا" ما فایل بچ با نام A.cmd را داریم و میخواهیم از داخل آن فایل بچ دیگری با نام B.cmd را اجرا کنیم
و فرض می کنیم که هر دوی این فایل ها در کنار هم قرار دارند.در این زمان چند حالت پیش می آید:
1. داخل فایل A.cmd دستورات مختلفی وجود دارند.ما میخواهیم اول تمام این دستورات اجرا شده و سپس
فایل B.cmd شروع به کار کند. در این صورت کار راحت هست و فقط با نوشتن نام فایل B.cmd در سطر آخر
مسئله حل است. یعنی کافی است که در سطر آخر فایل A.cmd فقط عبارت B.cmd را بنویسیم.
با این کار فایل A.cm کار عادی خود را انجام داده و در انتها فایل B.cmd را اجرا کرده و خودش بسته خواهد
شد.
2. گاهی نیاز ما طور دیگری هست. فرضا" یک سری دستورات داخل فایل A.cmd وجود دارند ولی اجرای فایل
B.cmd آخرین دستور نیست.
یعنی ما میخواهیم فایل A.cmd یک سری دستورات را انجام داده و سپس فایل B.cmd را اجرا کند و منتظر
بماند که کار فایل B.cmd تمام شود و دوباره اجرا شده و بقیه دستورات را انجام دهد.
در روش بالا گفتیم که فایل A.cmd بعد از اجرای فایل B.cmd بسته خواهد شد. ولی اینجا ما نمیخواهیم که
با اجرای فایل B.cmd فایل A.cmd بسته شود، بلکه میخواهیم فایل A.cmd فایل B.cmd را اجرا کرده و منتظر
پایان کار آن شده و پس از پایان کار فایل B.cmd دوباره بقیه دستورات را اجرا نماید.
در این صورت در محل لازم از فایل A.cmd باید دستور را بصورت زیر اجرا نمائیم:
start /wait B.cmd
اجرای فایل بچ با اجازه کاربری ادمین
==============
اینکه کاری کنیم که یک فایل Batch و یا حتی یک برنامه ، همواره با اجازه کاربری ادمین اجرا شوند به روش های
مختلفی قابل انجام است.
یعنی داخل ویندوز ما میتوانیم کاری کنیم که فایل های بچ (و یا حتی برنامه های بخصوص و یا اسکریپت های
دیگر) مستقیما" با اجازه کاربری ادمین اجرا شوند.
انجام اینکار مستلزم یک سری تنظیمات داخل ویندوز می باشد و حتی بعضی برنامه ها هم هستند که میتوانند
این کار را برایمان انجام دهند.
بحث در این مورد و چگونگی انجام آن خودش مفصل بوده و نیاز به تاپیکی مستقل و جداگانه دارد.
نکاتی در مورد Sysprep
=============
سهند عزیزچند بار در پیام هایتان در رابطه با Sysprep سوال کرده اید.
من در اینجا فقط در چند سطر و گذرا نکاتی را عرض میکنم ولی اگر بخواهید عمیقا" مسئله را پیگیری کنید ،لازم
است که در این مورد تاپیک جدیدی باز و مورد بحث قرار بگیرد.
اما کلیات:
----------
برای اینکه کاملا" متوجه شوید که مورد مصرف اصلی Sysprep چیست و چه مصارفی دارد به مثال زیر توجه فرمائید:
فرض کنید که یک شرکت درست کرده اید و در این شرکت قسمت های مختلفی هست و شما باید 50 عد کامپیوتر
بخرید و هر کدام را در یک اطاق از شرکت قرار دهید.
حالا که کامپیوتر ها را در محل های خودشان قرار دادید، اولین چیزی که لازم است اینه که روی همه کامپیوتر ها
ویندوز نصب کنید.
حالا این جا مشکل پیش می آید. بدینصورت که اگر بخواهید کسی را استخدام کنید که در 50 تا کامپیوتر شما ویندوز
نصب کند، این شخص باید سراغ تک تک کامپیوتر ها رفته ، ویندوز و نرم افزار های لازم و درایور ها را نصب کند.
با توصیف بالا نصب ویندوز و درایور ها و برنامه های لازم در هر کامپیوتر حدود 3 ساعت وقت خواهد گرفت.
لذا برای اینکه تمام کامپیوتر ها آماده شوند، در صورتیکه متخصص مربوطه روزی 8 ساعت کار کند ، با حساب کردن
ایام تعطیل و غیره حدود 20 روز طول خواهد کشید.
اینجاست که برنامه Sysprep بدرد خورده و میتواند کار 20 روزه را در چند ساعت تمام کند.
بدینصورت که:
_ شما در موقع خرید 50 تا کامپیوتر، همه را با سخت افزار یکسان میخرید.
_ تمام برنامه هائی را که میخواهید در همه کامپیوتر ها نصب شود را تهیه می کنید.
_ تمام درایور های لازم را تهیه میکنید (چون همه کامپیوتر ها دارای سخت افزار یکسان میباشند، لذا داشتن درایور های
فقط یک کامپیوتر برای همه کار خواهد کرد.)
حلا شما نرم افزار ها و درایور ها را به متخصص میدهید و میگوئید روی همه کامپیوتر ها ویندوز فرضا" 7 را با نرم افزار ها و
درایور های داده شده نصب کند.
در اینجا متخصص می آید و در کامپیوتر خودش یک ویندوز 7 با نرم افزار های مورد نیاز نصب کرده و سپس ویندوز خودش را
Sysprep میکند و به Sysprep میگوید که باید درایور های موجود در پوشه فلان را هم اتوماتیک نصب کند.
سپس از پارتیشنی که Sysprep شده یک ایمیج بر میدارد.
حالا اگر این ایمیج را به کامپیوتری در شرکت شما برگرداند، در مدت حدود یک ربع ویندوز کامل ، همرا با نرم افزار ها و درایور
ها نصب خواهد شد.و در ضمن عمل نصب بطور اتوماتیک و بدون نیاز به کاربر انجام خواهد گرفت.
لذا با این روش در عرض چند ساعت تمام 50 کامپیوتر دارای ویندوز فرضا" 7 با نرم افزار ها و تمام نیاز ها خواهند شد.
مثال بالا اولین علت ساخت فایل Sysprep می باشد. استفاده دیگر در این است که سعی میکنند با بکار گیری Sysprep
ویندوزی تهیه کنند که در هر کامپیوتری با هر نرم افزاری با تمام امکانات بالا نصب شود و کار کند.
البته این کار سختی های خودش را دارد و کمتر موفق میشوند.
اینطوری که من از گفته های شما فهمیدم Sysprep وقتی سیستمی داریم که مثلا ویندوز ده روی ان نصب شده است با تمامی درایورها و نرم افزارهایی که میخواهیم با این عمل Sysprep ما میتونیم از همین ویندوز بکاپی تهیه کنیم که روی یه کامپیوتر دیگه هم استفاده کنیم بدون مشکل .
منظور من از این Sysprep اینه که بطور مثال میخوام روی سیستمم ویندوز ده نصب کنم وبعد تمام نرم افزارها ودرایورهایی لازم رو روی اونصب وچیزهایی که لازم نیست وباید حذف نصب کنم رو انیستال کنم وبا عمل Sysprep از این ویندوز یه بکاپ بصورت install.wim تهیه کنم ودر مواقع لزوم از این بکاپ استفاده کنم.
Magsoud
12-14-2015, 05:53 PM
میخوام روی سیستمم ویندوز ده نصب کنم وبعد تمام نرم افزارها ودرایورهایی لازم رو روی اونصب وچیزهایی که لازم نیست وباید حذف نصب کنم رو انیستال کنم وبا عمل Sysprep از این ویندوز یه بکاپ بصورت install.wim تهیه کنم ودر مواقع لزوم از این بکاپ استفاده کنم.
بله اگر مراحل کار را درست انجام دهی، در سیستم شما ونیز سیستم هائیکه سخت افزارشان مثل کامپیوتر شماست، کار خواهد کرد
ولی البته بدون زحمت زیادی ، اگر از سیستمتان با یک نرم افزار مثل EaseUS Todo Backup بک آپ برداری هم، بهمین طریق عمل خواهد کرد.
استاد میخواستم لطف کنید مراحل کار Sysprep رو اگه ممکنه اموزش بدید:^:
خیلی خیلی ممنون
Magsoud
12-18-2015, 11:19 PM
سهند جان ، تاپیکی با عنوان مورد نظر درست فرمائید، من هم سعی میکنم در حد توان
مطالب مربوط به sysprep کردن استاندارد را توضیح دهم.
با سلام
استاد من بعد کلی کار فهمیدم هرکاری وهرچیزی که در کامپیوتر بخوام درست کنم اول باید این دستورات رو کاملا بلد باشم حداقل در توان خودم تو این یک ی دوهفته ای که مشغول کار با همون بکاپ ریستور که در تاپیکی اموزش دادید بودم با مقداری از دستورات نیز خودم کار کردم وبلد شدم
ولی چندتا ایراد داشتم که اگه زحمت جواب دادنشو بکشید خیلی ازتون ممنون میشم
1- یه فایل بچ اینجا اپلود میکنم که موقع اجرا نوشته هایی نشون میده ولی من میخوام هیچ چیزی نشون نده بجز همون سطر اول cmd عدش فقط رنگ صفحه عوض بشه هرکاری کردم نتونستم ممنون میشم راهنمایی کنید
http://up.worldup.ir/do.php?filename=Menu.rar
http://up.worldup.ir/do.php?imgf=Screenshot-1_e3933.jpg (http://up.worldup.ir/)
2- ما میخواهیم دستوراتی رو در یه فایل بنویسیم بطور مثال
میخواهیم مشخصات detail یه پارتیشن رو برامون بیاره
در این صفحه ((https://technet.microsoft.com/en-us/library/cc772390(v=ws.10).aspx )) بصورت لیست کل دستورات موجود هست میخواستم بدونم از شاخه diskpart و زیرشاخه detail وزیرشاخه سوم detail که detail volume هست دستوری رو تایپ کنیم اینو چطوری باید شروع کنیم من اینکار رو بصورت زیر انجام دادم ولی کار نکرد اکثرا در این صفحه دستورات زیر منو وزیر شاخه هایی دارند چطوری این دستورات زیر منو وزیرشاخه ها رو باید نشوت من اینطوری نوشتم
diskpart /detail /detail volume f
من میخواستم مشخصات درایو f رو برام نشون بده ولی با این دستور نشون نداد منظورم اینه که ترتیب نوشتن چطوری باید باشد در این گونه مواردی که میخواهیم از دستوری به زیرشاخه های اون دستور اشاره کنیم
http://up.worldup.ir/do.php?imgf=Screenshot-1_e7565.jpg (http://up.worldup.ir/)
Magsoud
03-08-2016, 01:45 PM
چشم سهند عزیز
من الان گرفتارم ولی سعی میکنم تاشب مطلب را توضیح دهم.
Magsoud
03-08-2016, 04:11 PM
اولا" فایلی که آپلود کرده بودی را هر کاری کردم نتوانستم استفاده کنم احتمالا" سرور اشکال دارد.فایلی که دانلود میشود
قابل استفاده نیست.
لذا نتوانستم متن دستوراتی که استفاده کرده ای را ببینم که بتوانم نظر بدهم.
اما در رابطه با سوالات:
------------------------
1. با اجرای بعضی از دستورات در فایل Batch ، برنامه پیغامی نشان خواهد داد.برای مثال اگر در یک فایل Batch از دستور
pause استفاده کرده باشی، پس از رسیدن به این دستور پیامی شبیه جمله زیر در پنجره مربوطه دیده خواهد شد:
Press any key to continue . . .
در بعضی موارد باید این پیغام دیده شود تا کاربر بداند که چکار باید بکند.
ولی بهر حال اگر بخواهیم پیغام دیده نشود می توانیم بعد از دستور عبارت null را بصورت زیر بکار ببریم فرضا" اگر مثال بالا
را بصورت زیر بنویسیم، دیگر پیامی دیده نخواهد شد:
Pause >null
تذکر: در مثالی که گفته شد گرچه دیگر پیامی دیده نخواهد شد ولی فایل Batch همینطوری باقی مانده و کاری نخواهد کرد
تا کاربر کلیدی را بزند.
شما میتوانید در پایان هر دستوری عبارت null را بصورت گفته شده استفاده نمائید.
2. در تصویری که قرار داده ای ، می بینم که عبارت ECHO OFF نشان داده شده است. اگر دستور ECHO OFF را بصورت زیر
بنویسی ،آن هم دیده نخواهد شد:
@ECHO OFF
3. در رابطه با دستور diskpart منظورت را درست متوجه نشدم ، لطفا" بیشتر توضیح بده که چکار میخواهی انجام دهی.
استاد اولا شرمند اگه اشتباه تایپی داشتم چون با گوشی انلاین شدم
منظورم از دیسک پارت اینه که در صفحه مایکروسافت بعضی از فرمانها زیر شاخه هایی دارند که بطور مثال اگه بخواهیم مشخصات درایورهامونو نشون بده
اونطوری که من فهمیدم باید اول دیسک پارت رو بنویسیم بعد دتایل بعد دتایل اینفو
ننیدونم این طرز نوشتن درسته یانه منظور من از این دستور اینه که مشخصات درایوهامو نشون بده با مشخصات تقریبا کامل
Magsoud
03-08-2016, 05:48 PM
سهند عزیز سعی میکنم امشب اگر عمری باشد چگونگی استفاده از این دستور را
با مثال توضیح دهم.
Magsoud
03-08-2016, 07:30 PM
میخواهیم با استفاده از دستور diskpart مشخصات هارد ها و سی دی رام های موجود در کامپیوتر را بدانیم .
برای کار با برنامه diskpart دو گونه میشود کار کرد: از طریق خط فرمان و از طریق فایل Batch
الف. از طریق خط فرمان:
-------------------------
1. دستور diskpart را در خط فرمان ویندوز تایپ کرده و سپس کلید Enter را فشار دهید.
2. دستور list volume را در خط فرمان ویندوز تایپ کرده و سپس کلید Enter را فشار دهید.
با اجرای دستورات بالا در کامپیوتر بنده، مشخصات زیر در صفحه خط فرمان ظاهر میشود:
Microsoft DiskPart version 5.1.3565
Copyright (C) 1999-2003 Microsoft Corporation.
On computer: MCS
DISKPART> list volume
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 J DVD-ROM 0 B
Volume 1 K DVD-ROM 0 B
Volume 2 C NTFS Partition 24 GB Healthy System
Volume 3 D NTFS Partition 20 GB Healthy
Volume 4 E NTFS Partition 40 GB Healthy Boot
Volume 5 F NTFS Partition 98 GB Healthy
Volume 6 G NTFS Partition 98 GB Healthy
Volume 7 H NTFS Partition 186 GB Healthy
همانطور که مشاهده می کنید مشخص شده که کامپیوتر بنده دارای تعداد 2 عدد DVD-ROM (درایو های J و (K و نیز یک
هارد می باشد که هارد دارای 6 پارتیشن (درایو هایC تا H) است و نیز حجم تک تک درایو ها و همچنین پارتیشن های
سیستم و بوت را هم مشخص نموده است.
ب. اجرای اتوماتیک دستوربالا توسط فایل Batch
-----------------------------------------------------
تنها دستوری که در مثال بالا بعد از اجرای diskpart استفاده کردیم، دستور list volume بود.
حال میخواهیم که مثال بالا را بطور اتوماتیک توسط فایل Batch انجام دهیم.
1. برنامه notepad را باز کرده و داخل آن فقط دستور list volume را تایپ نموده و سپس آن را با هر نامی مثلا" با نام
Sahand.txt ذخیره کنید.
2. یک فایل Batch با محتوای زیر درست کرده و آن را فرضا" با نام list.bat در کنار فایل Sahand.txt ذخیره کنید:
diskpart /s Sahand.txt
حال اگر این فایل Batch را اجرا کنید دوباره مشخصات گفته شده در بالا نشان داده خواهند شد.
یک نکته:
----------
شاید دوست داشته باشید که مشخصات گفته شده در بالا ، در صفحه خط فرمان نشان داده نشده بلکه در یک فایل متنی
نوشته شده و در جائی ذخیره شود که بعدا" استفاده نمائید.
برای اینکار دستور بالا را یصورت زیر بنویسید:
diskpart /s Sahand.txt >c:\abc.txt
با اجرای دستور بالا مشخصات مورد بحث درون فایلی بنام abc.txt در روت درایو C ذخیره خواهد شد. توجه داشته باشید
که بهتر است فایل abc.txt را توسط برنامه ای مثل ++ Notepad باز نمائید.
حال من فرض میکنم که شما بعد از دیدن مشخصات بالا میخواهید مشخصه کاملتری از پارتیشن فرضا" E که با نام
Volume 4 در بالا مشخص شده، داشته باشید.
برای این کار بعد از اجرای دستوراتیکه گفته شد بطریق زیر عمل نمائید:
1. دستور select volume 4 را تایپ کرده و سپس کلید Enter را فشار دهید.
2. دستور detail partition را تایپ کرده و سپس کلید Enter را فشار دهید.
با اینکار اطلاعاتی شبیه اطلاعات زیر ظاهر خواهد شد:
DISKPART> select volume 4
Volume 4 is the selected volume.
DISKPART> detail partition
Partition 4
Type : 07
Hidden: No
Active: No
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
* Volume 4 E NTFS Partition 40 GB Healthy Boot
می بینید که مشخصات بیشتری در رابطه با پارتیشن E نشان داده است.
امیدوارم توضیحات کافی بوده باشند.
استاد این فایلی هست که تمام محتویاتشو من داخل WINPE قرار میدم البته مقداری دستکاری کردم و بازم میخوام دستکاری کنم هم امکانات سی دی اضافه خواهد شد هم خودم یه چیزهایی با کمک شما بزرگوار یاد خواهم گرفت
http://up.worldup.ir/do.php?filename=Backup-Restore.rar
Magsoud
03-08-2016, 08:05 PM
سهند جان این فایلت را هم که دانلود کردم قابل خواندن نیست احتمالا" سایتی که آپلود کردی اشکال دارد
بعدا" اضافه شد
---------------------
از لینک شما با فایرفاکس ایراد دار دانلود میشود
با گوگل کروم گرفتم
استاد اگه میشه وامکانش هست اگه قابلیتهای جدید و امکانات دیگه ای که جالب وکاربردی هست تو یه تاپیکی برامون اموزش بدید که به این سی دی اضافه کرد خیلی ممنون میشم البته اگه حوصله تون کشید چون نمیخوام با سوالات بچگانه ام و شاید بی موردم شما رو هم به دردسر بندازم وخسته تون کنم
واقعیتش کارکرد این سی دی خیلی خیلی برام جالب شده مخصوصا جاهایی که دستکاری میکنم البته با کمک استادی مثل شما
Magsoud
03-08-2016, 08:32 PM
سهند جان
سوالات شما هیچوقت خسته ام نمیکنند.
فقط یک نکته را دوست دارم عرض کنم و آن اینکه:
با تجربیاتی که حقیر داشته ام براین عقیده ام که نباید هیچوقت به برنامه هائی که ساخت خود مایکروسافت هست
صد در صد اعتماد کرد.
با تجربیات بنده برنامه های ساخت مایکروسافت همواره اشکال دار هستند و جوابی هم برای سوالات نیست.
برای مثال هیچوقت از برنامه imagex برای گرفتن بک آپ از سیستمت استفاده نکن و از برنامه های دیگر مثل EaseUS
و غیره استفاده کن.
در خیلی موارد بک آپ نوع WIM با برنامه مایکروسافت موقع ری استور کردن عیب خواهد داشت مثلا" خواهد گفت که فایل
Winload.exe و یا غیره اشکال دارد
البته این ها نتیجه تجربیات بنده بوده و ممکن است کاملا" غلط باشند.
سهند جان
سوالات شما هیچوقت خسته ام نمیکنند.
فقط یک نکته را دوست دارم عرض کنم و آن اینکه:
با تجربیاتی که حقیر داشته ام براین عقیده ام که نباید هیچوقت به برنامه هائی که ساخت خود مایکروسافت هست
صد در صد اعتماد کرد.
با تجربیات بنده برنامه های ساخت مایکروسافت همواره اشکال دار هستند و جوابی هم برای سوالات نیست.
برای مثال هیچوقت از برنامه imagex برای گرفتن بک آپ از سیستمت استفاده نکن و از برنامه های دیگر مثل EaseUS
و غیره استفاده کن.
در خیلی موارد بک آپ نوع WIM با برنامه مایکروسافت موقع ری استور کردن عیب خواهد داشت مثلا" خواهد گفت که فایل
Winload.exe و یا غیره اشکال دارد
البته این ها نتیجه تجربیات بنده بوده و ممکن است کاملا" غلط باشند.
استاد در این مورد بنده هم با شما کاملا موافقم چون همین مورد Winload.exe برام پیش اومد وخیلی خیلی دردسربرام پیش اورد ولی درمورد این دستورات جدیدا خیلی برام جالب شده بطوریکه با هردستوری که یادمیگیرم وعملی میکنم مخصوصا تو این سی دی خیلی خوشحال میشم و این تجربیات رو مدیون محبتهای شما هستم وخیلی دوست دارم چیزای جالبی یاد بگیرم در مورد این دستورات وحتی نوشته های شما رو در چندسال پیش در انجمن سافت 98 هم دارم روشون کار میکنم
Magsoud
03-09-2016, 12:53 AM
سهند عزیز ، فایل Menu.CMD شما را نگاه کردم
با توجه به درخواستی که داشتی شاید بهتر باشد تغییراتی شبیه فایل پیوست بدهی تا قسمت اول
و دوم منو دو رنگ مختلف باشند.
لطفا" نتیجه را اعلام کن.
سهند عزیز ، فایل Menu.CMD شما را نگاه کردم
با توجه به درخواستی که داشتی شاید بهتر باشد تغییراتی شبیه فایل پیوست بدهی تا قسمت اول
و دوم منو دو رنگ مختلف باشند.
لطفا" نتیجه را اعلام کن.
استاد خیلی خوبتر از مال من شده وساده تر
خیلی ازتون سپاسگذارم
ولی استاد منظورمن این بود عین عکس پایین که چطوری در یه صفحه از چندین رنگ استفاده کردند
(http://up.worldup.ir/)
اینم فایلی که عکسشو گذاشتم با اجرای اون این تصویر رو نشون میداد
http://s6.picofile.com/file/8242588826/USB_Boot_Install.rar.html
Magsoud
03-09-2016, 07:56 PM
متاسفانه این مورد را نمیدانم ولی یک تحقیقی میکنم و اگر جواب پیدا کردم حتما" اطلاع خواهم داد.
Magsoud
03-10-2016, 10:39 AM
با مختصر گشتی در دنیای مجازی میتوانم به موارد زیر اشاره کنم
برای تغییر رنگ در خط فرمان ویندوز، فقط دستور color وجود دارد که خود شما طرز استفاده اش را می دانید و در مثال هایتان
بکار برده اید.
ولی این بدان معنی نیست که نمیتوانیم از فونت هائی با رنگ های مختلف در سطور مختلف فایلهای دستوری و Batch
استفاده نمائیم .برای مثال نمونه شکل زیر را نگاه کنید:
11269
در حقیقت ، کاربران ماهر ویندوز، برای رفع این کاستی فکرهائی کرده و روش هائی درست کرده اند.
و ما میتوانیم با استفاده از تجربیات آن ها براحتی از فونت هائی بارنگ های مختلف در خط فرمان ویندوز استفاده نمائیم
که یک روش را در شکل بالا مشاهده فرمودید.
استاد فایلی که عکسشو قرار داده بودم در پست 106 اپلود کردم خودم نتونستم بفهمم چه دستوری بکار برده فایلشو اپلود کردم
Magsoud
03-10-2016, 02:34 PM
در فایل مورد نظر شما از یک فایل بنام xecho.exe در کنار فایل Batch استفاده میکنند.
یعنی دستورات بعد از عبارت xecho توسط فایل مذکور اجرا می شوند.
در فایل مورد نظر شما از یک فایل بنام xecho.exe در کنار فایل Batch استفاده میکنند.
یعنی دستورات بعد از عبارت xecho توسط فایل مذکور اجرا می شوند.
با سلام دوباره وتبریک سال نو به همه دوستان
استاد من فایلی که رنگها رو در منوی cmd تغییر میداد با یه نمونه از دستورات یه فایل بچ که برای فرمت یواس بی استفاده میشه رو گذاشتم خودم چیزی نتونستم بفهمم ولی با اجرای این فایل بچ خودتون مشاهده خواهید کرد که نوشته ها رنگی میشه
من این فایل رو به همراه همون فایل بچ براتون اپ میکنم یه مطالعه ای بفرمایید واگه تونستید ممنون میشم دستوراتی رو که دراین مورد یعنی فایل XEcho هست یه مقداری توضیح بدید خیلی ممنون
http://s7.picofile.com/file/8244558176/New_folder.rar.html
(http://s7.picofile.com/file/8244558176/New_folder.rar.html)البته با یه مقدار گشتی که تو اینترنت زدم در مورد این فایل یه سایتی برخوردم که فکر میکنم احتمالا در رابطه با این فایل هس البته به نظر من
اینم لینک سایت موردنظر
http://www.epicsol.org/doku.php/xecho
Magsoud
03-25-2016, 04:05 AM
سهند عزیز، فایل پیوست را اجرا کرده و نتیجه را اعلام کن که اگر مورد نظرت بود چگونگی را توضیح دهم
فایل پیوست شبیه تصویر زیر عمل خواهد کرد
11277
Magsoud
03-25-2016, 05:44 PM
خط فرمان موجود در سیستم عامل ویندوز این قابلیت را ندارد که بتوانیم پیغام های خود را درون یک فایل Batch ،در رنگ
های گوناگون به کاربر نشان دهیم.
لذا برای انجام این خواسته باید از نرم افزار دیگری در کنار فایل Batch استفاده کنیم که یکی از آن ها برنامه XEcho.exe
است که در پست های قبلی به آن اشاره شد.
بعد از سوال جنابعالی ،بنده نرم افزار XEcho.exe را مطالعه کرده و اطلاعات کلی در موردش بدست آوردم و در کل میتوانم
بگویم که این برنامه موارد مصرف مختلفی دارد ولی با توجه به نبود اطلاعات زیاد در رابطه با آن، ونیز اطلاعات ناقصی که
سازنده ارایه کرده،من نتوانستم همه موارد مصرف آن را درست متوجه شوم.
ولی بهر حال با توجه به اینکه پرسش شما در رابطه با چگونگی استفاده از رنگ های مختلف با این نرم افزار بود، بنده این
مورد را متوجه شده و در پست قبلی نمونه کار را آپلود کردم.
و اما شرح کاملتر:
===========
_ برای اینکه بتوانیم از این برنامه همراه فایل Batch استفاده کنیم، حتما" بایستی فایل XEcho.exe در کنار فایل Batch
وجود داشته باشد.
_ برای اینکه بتوانیم با این برنامه پیغام هائی با رنگ های متفاوت بدهیم بایستی بصورت زیر عمل شود:
1. دستور کلی نشان دادن پیغام با رنگ های متفاوت بصورت زیر است
XEcho "message" /a:#
در سطر بالا در قسمت message باید پیغام خود را ما بین دو علامت "" قرار دهیم.
و قسمت اصلی کار یعنی تعیین رنگ پیغام ،در قسمتی که با علامت # مشخص شده انجام میگیرد. بایستی در دستور
بالا بجای علامت # ، کد رنگ مورد نظر را بنویسیم .
برای مثال اگر بخواهیم عبارت Sahand را برنگ زرد در زمینه مشکی نشان دهیم دستور بصورت زیر نوشته خواهد شد:
xecho "Sahand" /a:0E
اما کد های رنگ که میتوانیم بنویسیم:
======================
در دستور بالا دیدید که برای نشان دادن پیغام به رنگ زرد در زمینه مشکی از دو کاراکتر 0E استفاده شد.
کاراکتر اول همیشه یک عدد بوده (در مثال بالا عدد 0 )، رنگ زمینه پیغام را مشخص می کند.این کاراکتر میتواند عددی مابین
0 تا 9 باشد.
کاراکتر دوم همواره یکی از 6 حروف A,B,C,D,E,F است که رنگ خود پیغام را مشخص می نماید.
کد هائی که برای رنگ های مختلف می توانیم استفاده کنیم را در شکل زیر مشخص کرده ام که راحت تر استفاده نمائید:
http://www.worldup.ir/images/tnuue96fqrxbu50omgp.png (http://www.worldup.ir/)
استاد اگر بخواهیم توسط دستورات بچ از یه فولدری که در کنار همین فایل بچ هست یک فایل iso تهیه کنیم دستور به چه شکلی باید باشد
مثلا پوشه ای به نام win داریم که داخلش سی دی ویندوز رو کپی کردیم حالا میخواهیم این پوشه رو تبدیل به یه سی دی ویندوز کنیم دستورا چگونه باید باشد
من دستور رو مثل دستور پایین نوشتم ولی کار نکرد
@ECHO off
Set WorkDir=%~dp0
Oscdimg -n –bc:win\boot\etfsboot.com-win\ISO-windows.iso
Magsoud
04-03-2016, 01:48 PM
در بحث امروز (لینک (http://ariadl.ir/showthread.php?t=170529&p=335174&viewfull=1#post335174)) دستور مربوطه آمده است اگر کافی نبود در همین جا یادداشت بگذار تا توضیح دهم
Magsoud
04-04-2016, 04:44 AM
با فرض این که :
1. پوشه ای با نام win داریم که داخلش محتوای سی دی ویندوز 7 کپی شده است.
2. میخواهیم یک فایل Batch درست کرده و کنار پوشه win بگذاریم و نیاز مان این است که با اجرای این فایل Batch
از محتوای پوشه win یک ایزوی بوتیبل بنام win7.iso در کنار فایل Batch درست شود.
برای اجرای این کار:
1. اول دو تا فایل (oscdimg.exe و etfsboot.com) را تهیه و آن ها را هم در کنار پوشه win قرار دهید.
2. یک فایل Batch فرضا" با نام Create ISO.cmd با محتوای زیر را درست کرده و آن را هم در کنار پوشه win قرار دهید:
@ECHO off
Set WorkDir=%~dp0
oscdimg.exe -b"etfsboot.com" -n -h -m win win7.iso
حالا اگر فایل Create ISO.cmd را اجرا کنید ایزوئی بوتیبل با نام win7.iso در کنار فایل Create ISO.cmd درست خواهد شد
که از محتوای پوشه win درست شده است.
لطفا" نتیجه را اعلام فرمائید.
استاد
بعضی مواق هست که میخواهیم در دستورات بچ اشاره کنیم که کاری که فایل بچ باید انجام بده در این پوشه ای هست که خودفایل بچ توش قرار داره وطبق اموزشهای شما من فهمیدم که این کار به اینصورت باید انجام بشه
@ECHO off
Set WorkDir=%~dp0
حالا مثلا در این دستور چطور باید مسیر رو مشخص کنیم که اینکار در کدام پوشه باید انجام بشه
:
مثلا پوشه ای به نام New folder داریم داخلش تعدادی پوشه هست که اسم یکیشون WIN هست و در داخلش سی دی ویندوز رو کپی کردیم حالا میخواهیم دستوری بدیم که مشخص بشه داخل این ویندوز چند ویندوز وجود داره من اینو اینطوری نوشتم ولی کار نمیکنه میخوام ببینم الان بجز خط دوم در کجا باید ادرس رو مشخص کنیم که فایل بچ بفهمه کاری که باید انجام بشه کجاست من اینطوری فهمیدم که وقتی میخواهیم دستور بدیم جایی که خود فایل بچ قرار داره یعنی New folder همون CD هست یا نه من دستور رو بشرح زیر نوشتم
@ECHO off
Set WorkDir=%~dp0
dism /Get-ImageInfo /Image File:CD\win\sources\install.wim
منظورم اینه که ادرس همین پوشه ای که فایل بچ در اون اجرا میشه رو چی میذارند؟؟؟
منظور از CD در خط سوم مگه اینو نمیرسونه که منظور همین پوشه هست که داخلش فایل بچ اجرا شده؟؟؟؟
Magsoud
04-04-2016, 04:40 PM
سهند جان ، شرمنده ام چون چند لحظه پیش میهمان رسیده و اگر پیششان نروم فکر میکنند دارم بی احترامی و بی توجهی میکنم.
مخصوصا" که فامیل عیال هم هستند و من باید در خدمت فک و فامیل عیال باشم؟؟؟؟!!!!!
چشم در اولین فرصت حواب را عرض میکنم. صدای عیال بلند شده که میگوید پس کجائی؟
Magsoud
04-04-2016, 07:19 PM
سهند عزیز، برای اینکه چگونگی کار کردن در داخل پوشه مورد بحث را متوجه شوی به چند مثال زیر توجه کن:
1. پوشه ای بنام فرضا" xxx در روت یکی از درایو ها مثلا" درایو H درست کن (H:\xxx).
2. پوشه ای دیگر بنام win درون پوشه H:\xxx درست کن.
3. حالا یک فایل Batch با نام a1.cmd با محتوای زیر درست کرده و آن را درون پوشه H:\xxx ذخیره کن:
@ECHO OFF
MODE CON: COLS=60 LINES=10
color 4f
Set WorkDir=%~dp0
echo %~dp0
pause
ما در این فایل Batch اول با دستور Set WorkDir=%~dp0 به فایل Batch گفته ایم که محل کارش عبارت از %~dp0 است
و سپس در سطر بعدی با استفاده از دستور echo خواسته ایم آدرس محل کار خودش را (یعنی محل %~dp0 را ) نشان
دهد.
حال اگر این فایل Batch را اجرا کنی خواهی دید که آدرس محل کارش را بصورت شکل زیر نشان می دهد:
http://www.worldup.ir/images/nfhviewvrbskb6u0xkp.png (http://www.worldup.ir/)
در این شکل می بینیم که گفته آدرس محل کارش (یعنی همان %~dp0 ) عبارت است از
H:\xxx\
بنابر این ما هر جائی در این فایل Batch عبارت %~dp0 را بنویسیم ، فایل Batch آن را مساوی آدرس بالا خواهد شناخت.
4. حالا فایل a1.cmd را باز کرده و در داخل آن مطابق متن زیر عبارت echo %~dp0 را با عبارت echo %~dp0win عوض کرده و ذخیره کن.
@ECHO OFF
MODE CON: COLS=60 LINES=10
color 4f
Set WorkDir=%~dp0
echo %~dp0win
pause
با این تغییر به فایل Batch گفته ایم که آدرس محل پوشه win را به ما نشان دهد
حال اگر فایل a1.cmd را اجرا کنی خواهی دید که مطابق شکل زیر آدرس دقیق محل پوشه win را نشان می دهد:
http://www.worldup.ir/images/m5ngryu3i3v1u03zd3.png (http://www.worldup.ir/)
بنابر این آدرس ها را بایستی همانطور که در دو تا مثال بالا نشان داده شد استفاده کنی.
برای مثال فرض کنیم که در داخل پوشه win فایلی بنام xxx.exe وجود دارد. حالا اگر شما بخواهید این فایل xxx.exe را
اجرا کنید، در این مثال در فایل a1.cmd بایستی بصورت زیر دستور را تایپ نمائید:
@ECHO OFF
MODE CON: COLS=60 LINES=10
color 4f
Set WorkDir=%~dp0
%~dp0win\xxx.exe
اگر مطلب هنوز واضح و گویا نیست یاد داشت بگذار تا بیشتر توضیح دهم.
استاد من طبق گفته شما ادرسی که میخوام به فایل بچ نشون بدم رو همون قرار دادم که در خط دوم هست ولی بازم کار نکرد نمیدونم اشکال کار کجاست فایل بچ باز وبسته میشه
@ECHO off
Set WorkDir=%~dp0
dism /Get-ImageInfo /Image File:%~dp0win\sources\install.wim
این فایل قرار مشخصات ویندوزی که داخل پوشه win هست رو نشون بده که پوشه win کنار فایل بچ هست
Magsoud
04-04-2016, 08:33 PM
متاسفانه دلیل اشکال را نمیدانم لذا فرصتی بدهید تا عملا" تست کرده و بعد نتیجه را اعلام خواهم کرد
Magsoud
04-04-2016, 10:31 PM
همانطور که می دانید بنده از ویندوز های بعد از ویندوز 7 استفاده نمیکنم لذا تست های زیر را با Dism موجود در ویندوز 7
انجام دادم که نتیحه بشرح زیر بود:
1. اول دستورهای زیر را که شما هم استفاده کرده بودید تست کردم ( البته برای اینکه فایل Batch در صورت مواجه شدن
با اشکال سریع بسته نشود به انتهای آن دستور pause را اضافه کردم:
@ECHO off
Set WorkDir=%~dp0
dism /Get-ImageInfo /Image File:%~dp0win\sources\install.wim
pause
فایل Batch چند لحظه بعد از اجرا ، اعلام خطا کرده و پیغام داد که دستوری که استفاده شده را نمی شناسد.
2. به مشخصه های Dism موجود در ویندوز 7 مراجعه کردم و دیدم که بله این نوع DISM دستوری بنام Get-ImageInfo
ندارد.
ولی در عوض دستوری بنام get-wiminfo دارد که دقیقا" همان کار Get-ImageInfo را انجام میدهد لذا فایل Batch با محتوای
زیر درست کرده و اجرا کردم:
@ECHO off
Set WorkDir=%~dp0
dism /get-wiminfo /wimfile:%~dp0win\sources\install.wim
pause
و چند لحظه بعد از اجرا مشخصات چندین نوع ویندوز موجود در فایل Install.wim نمایان شدند که برای هر نوع چند سطری توضیحات داده شده بود.
نکته آخر اینکه در سیستم بنده فایل های DISM جدید کار نمیکنند.
با سلام
فرق فایلهای bat , cmd در چیه ؟؟
کدومش بهتر کارمیکنه؟؟؟
Magsoud
05-01-2016, 10:33 PM
در ویندوز های قدیمی از پسوند bat استفاده میشد.
در ویندوز های جدید هردو پسوند فوق درست کار خواهند کرد ولی پسوند cmd روان تر و سریعتر کار خواهد کرد.
سلام
استاد من با استفاده از این دستور از یه پوشه فایل ایزو درست میکردم بطور مثال
@ECHO off
Set WorkDir=%~dp0
oscdimg.exe -b"etfsboot.com" -n -h -m win windows.iso
حالا یه سوالی اینجا برام مطرح شده واون اینکه اگه در این پوشه که فایل ایزوی تولید شده که بنام(( WINDOWS.ISO)) میباشد اکه یه فایل به همین نام باشد وما بخواهیم که بعد این وقتی این دستور رو اجرا میکنیم اگر همین WINDOWS.ISO وجود داشت جلوی نام این یه 1 بذار واگه 1 وجود داشت 2 بذاره والی اخر واگه وجود نداشت هم که هیچ دستور به چه شکلی باید باشد
Magsoud
05-19-2016, 09:41 PM
بنده روشی در مورد نوعی که شما میخواهید در ذهنم نیست.
ولی میشود بصورت زیر کار کرد تا نام فایل ایزوی نهائی متغیر باشد:
دستوری که در بالا برای oscdimg نوشته اید را می شود نوع دیگری استفاده کرد. بدینصورت که عوض
اینکه در دستور عبارت windows.iso را بنویسیم، میتوان آن را فرضا" بصورت زیر بنویسیم:
oscdimg.exe -b"etfsboot.com" -n -h -m win %AA%
بدیهی است که با دستور بالا برنامه برای انتخاب اسم ایزوی نهائی دنبال متغیری بنام AA خواهد گشت.
که البته شما قبل از دستور فوق بایستی مقدار AA را مشخص کرده باشید.
برای مثال می توانید نام را مخلوطی از نام مورد نظر خود و نیز زمان تعیین کنید.
با این کار هر موقع که دستور بالا اجرا شود نام ایزوی نهائی نام تعیین شده توسط شما بعلاوه چند عدد
(زمان، سال، ماه....) خواهد بود که با نام قبلی فرق خواهد داشت.
اگر نتوانستم درست تشریح کنم یادداشت بگذارید.
Magsoud
05-22-2016, 05:52 PM
سهند عزیز ، از اینکه دیر به سوالت پاسخ می دهم بشدت شرمنده ام ولی چکنم که چند روز است مریضی (بویژه درد 24
ساعته در پا هایم) بشدت خسته و رنجورم کرده است.
هنوز حال خوبی ندارم ولی بهتر دیدم که حداقل مقدماتی ترین روش کار را توضیح دهم و توضیحات تکمیلی در صورتی که نیاز
داشته باشید را اگر عمری باقی مانده باشد ،بعدا" ادامه می دهیم.
شما در پست قبلی دستوری را برای درست کردن ایزوئی بنام Windows.iso نشان داده و بعد گفته اید که گاهی ممکن
است در زمان اجرای این دستور ، ایزوئی با همین نام در محل مورد نظر وجود داشته باشد و پرسیده اید که چگونه میشود
دستور مورد بحث را تغییر داد که در صورت بودن ایزوی هم نام ، آن را پاک نکرده و ایزوئی با نام دیگر درست کند؟
برای اجرای خواست شما روش های مختلفی می شود بکار برد.
_ میشود کاری کرد که در صورت وجود ایزوی Windows.iso ایزوئی دیگر ساخته شود که بعد از نامش چند تا عدد اتفاقی
اضافه شود مثلا" ایزوئی با نام Windows2016.iso ساخته شود.
_ میشود ایزوئی ساخت که به انتهای نام ایزو چند تا کاراکتر اتفاقی اضافه شود مثلا" WindowsXX.iso
_ میشود کاری کرد که به انتهای نام ایزو، تاریخ یا روز یا ساعت یا چند عدد اتفاقی و یا چند حرف اضافه شود. که هر کدام از
این روش ها خودش یک مبحث جداگانه است.
بهر حال برای شروع کار،ساده ترین راه را برایتان عرض میکنم
فرض میکنم:
1. فایل Batch شما و نیز دو تا فایل oscdimg.exe و etfsboot.com و نیز پوشه ای بنام Win درون یک پوشه مثلا"
بنام xxx (یا هر نام دیگر) قرار دارند
2. درون پوشه Win فایل های ویندوزی قرار دارند که شما میخواهید ایزوی آن را درست کنید
3. میخواهید ایزوی نهائی هم درون پوشه xxx در کنار بقیه فایل ها درست شود.
فایل Batch با محتوای زیر را درون پوشه xxx درست نمائید:
@echo off
set WorkDir=%~dp0
IF EXIST windows.iso (
set AA=windowsB.iso
) ELSE (
set AA=windows.iso
)
oscdimg -b"etfsboot.com" -n -h -m win %AA%
با اجرای فایل Batch بالا:
1. اگر ایزوئی با نام Windows.iso درون پوشه xxx وجود نداشته باشد ، ایزوئی با نام Windows.iso درون پوشه xxx درست
خواهد شد.
2.اگر قبلا" ایزوئی با نام Windows.iso درون پوشه xxx وجود داشته باشد ، ایزوئی با نام windowsB.isoدرون پوشه xxx
درست خواهد شد.
Magsoud
05-23-2016, 08:36 PM
اگر نیاز میدانید که روش های دیگری را هم برای انجام این کار بدانید، در همین جا اعلام کنید تا ادامه دهم.
اگر نیاز میدانید که روش های دیگری را هم برای انجام این کار بدانید، در همین جا اعلام کنید تا ادامه دهم.
استاد اگه حوصله داشتید خیلی ممنون میشم ادامه بدید خیلی ممنون
استاد من میخواستم توی منوی راست کلیک فایلهای .cab گزینه ای بزای نصب باشه ایا چنین دستوری هست که بتونیم با راست کلیک برروی فایلهای کابین بشه اونا رو نصب کرد
ممنون
Magsoud
10-09-2016, 02:10 AM
سهند عزيز
اگر فايل پيوست را دانلود كنيد، دوتا فايل رجستري خواهيد داشت.
با اجراي فايل do.reg ، منبعد اگر روي يك فايل CAB كليك راست كنيد، خواهيد ديد كه مطابق شكل زيرگزينه اي
با عنوان Install this update به منوی كليك راست اضافه شده كه اگر روي آن كليك كنيد شروع به نصب فايل
CAB خواهد كرد
http://www.worldup.ir/images/iwnvtzbzs8z64ef53c9.png (http://www.worldup.ir/)
و با اجراي فايل undo.reg گزينه فوق از منوي كليك راست حذف خواهد شد.
==========================
در ضمن، متاسفانه در رابطه با سوالی که در مورد دانلود 99 در صد مطرح فرمودید، جوابی پیدا نکردم
با سلام
استاد من میخوام دستوری در اخر فایلهای بچ اضافه کنم که کارهایی که با همین فایل بچ انجام داده رو در یه فایل text در کنار فایل بچ سیو کنه ایا همچین کاری امکان پذیر هست یانه؟؟؟
Magsoud
12-24-2016, 04:06 PM
این کار شدنی است ولی مشکلات خودش را دارد و با تحربیاتی که دارم در اکثر موارد درست جواب
نخواهد داد.
این خواسته شما در فایل های bat با استفاده از دستورات Redirection قابل اجراست که اگر لازم
بدانید میتوانم در رابطه با چگونگی استفاده از خاصیت Redirection توضیحاتی بدهم.
این کار شدنی است ولی مشکلات خودش را دارد و با تحربیاتی که دارم در اکثر موارد درست جواب
نخواهد داد.
این خواسته شما در فایل های bat با استفاده از دستورات Redirection قابل اجراست که اگر لازم
بدانید میتوانم در رابطه با چگونگی استفاده از خاصیت Redirection توضیحاتی بدهم.. استاد زحمتشو بکشید ممنون میشم
Magsoud
12-25-2016, 05:11 PM
اگر بخواهیم بطور تخصصی در رابطه با Redirection صحبت کنیم، ممکن است مطلب مقداری سنگین شود
لذا بر آن شدم که نکات لازم را مختصر ولی بصورت مثال های عملی توضیح دهم.
فرض کنیم که میخواهید با اجرای یک دستور Batch زمان و تاریخ این لحظه در یک فایل متنی نوشته شود
برای انجام این کار یک فایل Batch با محتوای زیر نوشته و آن را در دسکتاپ با نام Time.cmd ذخیره نمائید:
echo %date% %time% >xxx.txt
حال اگر این فایل را اجرا کنید، خواهید دید که فایلی بنام xxx.txt در دسکتاپ ساخته شد. واگر فایل xxx.txt
را باز کنید مشاهده خواهید کرد که زمان فعلی بصورت مثال زیر در داخل آن ثبت شده است:
Mon 12/26/2016 15:45:01.13
ما در مثال بالا برای انحام خواسته خود از علامت < استفاده کردیم.
حالا بیائیم یک مثال دیگر را امتحان کنیم.فرض کنید که در داخل دسکتاپ شما تعدادی فایل وجود دارند و
شما میخواهید با اجرای یک دستور اسامی فایل های موجود در دسکتاپ را در داخل یک فایل متنی بنویسید
برای این کار دستور زیر را در داخل فایل Batch تایپ کنسد:
dir /a /b /-p /o:gen >xxx.txt
حال اگر آن را اجرا کنید، خواهید دید که فایلی بنام xxx.txt در دسکتاپ ساخته شد. واگر فایل xxx.txt را باز
کنید مشاهده خواهید کرد که اسامی فایل ها و دایزکتوری ها و شورت کات های موحود در دسکتاپ در داخل
آن نوشته شده اند.
با دو تا مثال بالا دیدیم که میتوانیم با استفاده از علامت < کاری کنیم که فایل Batch نتیجه کارش را عوض
نشان دادن به ما در پنجره خط فرمان، در داخل یک فایل متنی ذخیره کند.
حالا به مرحله دیگری از این کار می پردازیم که بهتر و قوی تر است.
فرض کنیم که میخواهیم کاری کنیم که با اجرای یک فایل Batch هم زمان انجام کار و هم نتیجه کار در داخل
یک فایل متنی ذخیره شود.
برای انجام اینکار برابر روش بالا باید دو تا دستور زیر را داخل فایل Batch بنویسیم:
echo %date% %time% >xxx.txt
dir /a /b /-p /o:gen >xxx.txt
ولی اگر فایل Batch بالا را اجرا کنیم، خواهیم دید که در فایل متنی فقط نتیجه دومین دستور یعنی نشان دادن
محتویات دسکتاپ وجود داشته و اثری از زمان انجام کار نیست.
ولی اگر دستورات بالا را با مختصر تغییر بصورت زیر نوشته و اجرا کنیم خواهیم دید که اول زمان نوسته شده و
بعد از آن محتویات دسکتاپ قرار گرفته اند:
echo %date% %time% >>xxx.txt
dir /a /b /-p /o:gen >>xxx.txt
تنها فرقی که دستور جدید با دستور قبلی دارد این است که در اینجا بجای یک علامت < از دو تا علامت <<
استفاده کردیم.
اگر از یک علامت < استفاده کنیم، هر دفعه ای که فایل اجرا می شود، برنامه اول محتوای فایل متنی را پاک
کرده و سپس نتیجه کارش را می نویسد.و در این مثال با اجرای سطز اول، رمان نوشته می شود ولی با اجرای
دستور سطر دوم، متن داخل فایل متنی یعنی زمان پاک شده و نتیحه آخرین دستور یادداشت می شود.
ولی اگر دو تا علامت << استفاده کنیم برنامه دیگر محتوای فایل متنی را پاک نکرده و نتیجه کار را در سطر
بعد از انتهای متن موجود یادداشت می نماید.
در مثال های بالا دیدیم که چگونه میتوانیم با استفاده از علامت < کاری کنیم که نتیجه کار فایل Batch در یک
فایل متنی در کنار فایل Batch ذخیره شود.
مطلب در رابطه با Redirection زیاد است ولی قسمتی که شما مورد نظرتان بود در بالا تشریح شد.
موفق باشید.
سلام
استاد من دستوری در cmd یا پاورشل میخواستم که بتونه از درایورهای سخت افزارهای ویندوز 7 بکاپ تهیه کنه در ویندوز 8و10 هست ولی 7 نمیدونم البته بدون نرم افزار فقط با cmd یا پاورشل ویندوز
Magsoud
04-19-2017, 10:03 PM
سلام
استاد من دستوری در cmd یا پاورشل میخواستم که بتونه از درایورهای سخت افزارهای ویندوز 7 بکاپ تهیه کنه در ویندوز 8و10 هست ولی 7 نمیدونم البته بدون نرم افزار فقط با cmd یا پاورشل ویندوز
قبل از توضيح روشي كه تجربه دارم لازم ميدانم كه به نكته اي اشاره كنم.
برنامه هاي DISM و PowerShell موحود در ويندوز 10 تغييراتي كرده اند كه توسط آن ها ميتوان با استفاده از
خط فرمان ويندوز بتوان درايور ها را بكآپ يا ري استور كرد كه اين قابليت در فايل هاي مشابه موحود در ويندوز 7
وحود ندارند.
تنها تحربه اي كه در رابطه با گرفتن بكاپ از درايور هاي سيستم با استفاده از فايل Batch دازم با بكار بردن
برنامه Double Driver 4.1.0 كه يك برنامه مجاني و خيلي كم حجم است مي باشد كه اگر دوست داشته
باشيد ميتوانيد شرح زير انجام دهيد:
1. پوشه اي بنام Driver در روت درايو D درست كنيد (D:\Driver)
2. داخل پوشه Driver پوشه ديگري بنام Backup درست كنيد (D:\Driver\Backup).
3.فايل هاي برنامه Double Driver را داخل پوشه D:\Driver قرار دهيد (توضيح اينكه فايل اجرائي اين برنامه
dd.exe نام دارد).
4. يك فايل Batch فزضا" با نام Backup.cmd و با محتواي زير دزست كرده و آن را هم داخل پوشه D:\Driver
قرار دهيد:
[CODE][ddc b /source:"C:\Windows" /target:"D:\Driver\Backup"
/CODE]
حال اگر فايل Backup.cmd را اجرا كنيد ، اين برنامه درايور هاي سيستم را داخل پوشه D:\Driver\Backup
قرار خواهد داد.
توضيح اينكه با تست هاي بنده اين روس در ويندوز هاي XP و ويندوز 7 كار كرد ولي بعللي كه برايم مشخص
نيست در ويندوز هاي مجازي كار نميكند. لذا اگر خواستيد امتحان كنيد بايد از سيستم حقيقي استفاده نمائيد.
استاد من تعدادی فایل دارم که فایلهای dll ,ocx هستند ودر کنار اینا یه فایل inf هست که در یه پوشه هستند که فایل inf دستور نصب این فایلها هست حالا میخوام اول همه اینا رو جمع -تبدیل به یه فایل وبعد با دستور cmd بصورت سایلنت نصب کنم
یعنی اینکه دستور نصب سایلنت فایل inf در cmdچطوریه
Magsoud
04-21-2017, 03:38 AM
من تاكنون تحربه نصب فايل هاي INF توسط فايل Batch را ندارم، لذا براي اينكه سوال شما بيجواب نماند( چون
ميدانم كسي پاسخ نخواهد داد) چند ساعتي در صفحات وب دنبال جواب گشتم.
راه هاي مختلفي گفته بودند ولي ظاهرا" اكثر راهها براي اين كار گاهي كار ميكنند و گاهي نه.
بهر حال يكي از روش هاي گفته شده را بهتر تشخيص داده و بنظرم مطمئن تر آمد كه در زير توضيح داده و
اميدوارم براي شما كار ساز باشد.
نويسنده مطلب گفته بود كه با دستور زير فايل هاي INF موحود در پوشه c:\drivers نصب خواهند شد:
pnputil.exe -a c:\drivers\*.inf
موفق باشي
استاد من تعدادی فایل دارم که فایلهای dll ,ocx هستند ودر کنار اینا یه فایل inf هست که در یه پوشه هستند که فایل inf دستور نصب این فایلها هست حالا میخوام اول همه اینا رو جمع -تبدیل به یه فایل وبعد با دستور cmd بصورت سایلنت نصب کنم
یعنی اینکه دستور نصب سایلنت فایل inf در cmdچطوریه
با سلام
با مقداری جستجو که انجام دادم تونستم راهشو پیدا کنم اینم راهش
فایل زیر رو با فرمت cmd درکنار فایل inf قرار داده و فایل cmd رو اجرا میکنیم
rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\<inffile>.inf
استاد من تعدادی فایل دارم با مشخصات زیر
NET.Framework4.6.2_silent.exe
kb4014547_silent.exe
KB4014565.msu
و همه اینا رو در یه پوشه قرار دادم دوتای اولی رو بصورت sfx دراوردم که نصب سایلنت دارند
ویه فایل cmd درست کردم که در کنار اینا قرار دارد که دستور نصب اینهاست
@ECHO off
Set WorkDir=%~dp0
echo ************************************************** ********************
echo ************************************************** ********************
echo.
ECHO. *NET Framework 4.6.2*
echo.
%~dp0"NET.Framework_silent.exe"
echo.
echo *Successfully Install*
echo.
echo ************************************************** ********************
echo.
ECHO. *Update for Microsoft .NET Framework 4.6 (KB4014547)*
echo.
%~dp0"kb4014547_silent.exe"
echo.
echo *Successfully Install*
echo.
echo ************************************************** ********************
echo.
ECHO. *KB4014565.msu*
echo.
wusa.exe KB4014565.msu /quiet /norestart
echo.
echo *Successfully Install*
echo.
echo ************************************************** ********************
echo.
ECHO. *NET Framework 4.6.2 Full Package*
timeout /t 3
EXIT
ورد اخر اینکه اون سه تا فایل با این فایل cmd بصورت sfx دراوردم که در موقع اجرا فایل cmd
درست کار نمیکنه یعنی دوتای اول نصب میشه ولی سومی که یه فایل msu هست نصب نمیشه البته در ویندوز فعلیم درست کار میکنه ولی من این فایل رو در پوشه oem قرار دادم که موقع نصب ویندوز اتوماتیک نصب بشه در این حالت درست کار نمیکنه
استاد یه زحمتی بکشید واین فایل cmd رو چک کنید ببینید ایا دستورات اشتباهی هست یا مشکل جای دیگه هست
((البته به نظر بنده حقیر مشکل از دستور ننصب فایل msu هست چون تا اونجا فایل cmd درست کار میکنه))
با سلام
استاد یه سوال داشتم
وقتی میخواهیم فایلی یا فولدری رو به مسیر زیر کپی کنیم دستور به چه شکلی خواهد بود در حالتی که ما نمیدانیم ((username))
کامپیوتری که میخواهیم این فایل یا فولدر به اون کپی بشه چیه چون در هر کامپیوتری متفاوته
البته فایل یا فولدری که میخواهیم کپی شود در کنار خود فایل Batch هست
C:\Users\{username}\AppData\Roaming
Magsoud
05-12-2017, 12:52 AM
سهند عزيز، در ويندوز بحثي هست كه Environment Variables نام دارد كه در اين بحث سوال شما و تمام
سوالات ديگر مشابه جواب داده مي شود.
توجه داشته باشيد كه بحث Environment Variables و مقادير گفته شده در آن براي ويندوز هاي مختلف
متفاوت است.
من براي اينكه شما راحت تر بجواب سوالي كه پرسيديد و ديگر سوالات مشابه برسيد در جدول زير مقادير
تعدادي از متغير هاي مورد نياز را براي ويندوز 7 قرار مي دهم:
================================================== ==================
Name Meaning
================================================== ==================
%ALLUSERSPROFILE% C:\ProgramData
================================================== ==================
%APPDATA% C:\Users\{username}\AppData\Roaming
================================================== ==================
%CommonProgramFiles% C:\Program Files\Common Files
================================================== ==================
%LOCALAPPDATA% C:\Users\{username}\AppData\Local
================================================== ==================
%SYSTEMDRIVE% C:
================================================== ==================
%ProgramData% %SystemDrive%\ProgramData
================================================== ==================
%ProgramFiles% %SystemDrive%\Program Files
================================================== ==================
%TEMP% or %TMP% C:\Users\{Username}\AppData\Local\Temp
================================================== ==================
%USERPROFILE% C:\Users\{username}
================================================== ==================
%WINDIR% C:\Windows
================================================== ==================
شما موقع استفاده در فايل Batch ميتواني بجاي آدرس هاي موجود در سمت راست جدول بالا، از عبارت
موجود در سمت چپ استفاده نمائيد.
براي مثال براي سوالتان در پست بالا (C:\Users\{username}\AppData\Roaming) همانطور كه در جدول بالا
مي بينيد ميتوانيد فقط عبارت %APPDATA% را بنويسيد.
اگر مطلب گنگ بود خبر بده تا سعي كنم بيشتر شرح دهم.
استاد باتوجه به گفته شما چرا این فایل به رجیستری اضافه نمیشه
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Default Download Directory"="%UserProfile%\Pictures"
Magsoud
05-12-2017, 11:11 PM
با چه دستوری و یا چگونه این فایل رجستری را اعمال میکنی که جواب نمی دهد؟
همینطوری اجرا میکنم بصورت یه فایل رجیستری
یا دوبار کلیک روی همین فایل رجیستری
یا راست کلیک وmerge
Magsoud
05-13-2017, 09:55 PM
سهند عزیز، من مقداری گیج شده ام. نمی توانم بفهمم که این فایل چکار باید بکند.
لطفا" توضیح بدهید که منطورتان از اجرای این فایل این است که محل دانلود را عوض کنید؟
اگر آره بنظرم میرسد که باید طور دیگری عمل کنید.
برای اینکه پوشه دانلود در ویندوز نام دیگری دارد که کد شده است ووو...........
لطفا" بیشتر توضیح دهید. تا روش درست را پیدا کنیم.
استاد این فایل کارش اینه که:
محل فایلهایی که توسط اینترنت اکسپلور11 دانلود میشه رو تغییر میده
در اصل محل اصلی وپیش فرض پوشه دانلود در پوشه یوزر هست وقانونا باید با اجرای این فایل محل دانلود تغییر کنه در حالیکه بااجرای این فایل اصلا تغییری ایجاد نمیشه نمیدونم چرا
Magsoud
05-15-2017, 04:59 AM
سهند عزيز بايستي فايل رجستري مورد استفاده خودت را بشكل زير اصلاح كني تا درست اجرا شود:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Default Download Directory"="%UserProfile%\\Pictures"
مي بيني كه همه چيز مثل فايل شماست با اين فرق كه در آدرس بجاي يك علامت \ از \\ استفاده شده.
استاد یه سوال داشتم
ایا میشود با یه فایل bat دوتا یا هرچندتافایل bat ساخت که مضامین مختلفی هم داشته باشند
مثلا یه فایل bat داریم میخواهیم با اجرای ان دوتا فایل batدر کنار همون فایل ساخته شود به نام های مثلا a و b که
فایل a دستورات مثلا بطور مثال فرمت کردن درایو رو داره و فایل b دستور مومنت کردن ویندوز رو داره
دراصل من تعداد زیادی فایل bat دارم که تقریبا 20تا هستند میخوام همه اینها رو پاک کنم وفقط یه فایل bat داشته باشم که با اجرای اون در کنار همون فایل فایلهای قبلی ساخته شود با همون محتوای قبلی
Magsoud
07-06-2017, 08:36 PM
بله شدنی هست . میتوان با دستورات batch فایل یا فایل های Registry درست کرد و یا فایل یا فایل های
batch مختلف ساخت.
ولی با این کار حجم فایل batch بالا رفته و در نتیجه احتمال خطا هم بیشتر می شود.
اگر از دست فایل های batch ناراحتی میتوانی با استفاده از برنامه های مختلفی هر کدام از آن ها را به یک
فایل Exe تبدیل کنی.
بالاخره اینکه تنبلی موقوف. در مسیری که درست جا افتادی محکم تر خواهی زفت.
و شاید الان که جوان هستی و حوصله داری،بهتر باشد که سعی کنی تا برنامه ای مثل NSIS را یاد بگیری که
با یاد گیری اسکریپت نویسی NSIS دست وبالت بیشتر باز خواهد بود.
Magsoud
07-07-2017, 08:57 PM
براي اينكه با استفاده از يك فايل Batch ، فايل Batch يا فايل هاي Batch ديگري درست كنيد بصورت مثال زير
عمل نمائيد:
فرض كنيم كه ميخواهيم با جراي يك فايل Batch ، فايل Batch ديگري بنام xxx.cmd با محتواي زير در كنار همين
فايل Batch كه اجرا مي كنيم درست شود:
@ECHO OFF
start /wait E:\WINDOWS\system32\xxx.exe
start /wait regedit.exe /s zzz.reg
براي انجام اين كار كافي است كه در داخل فايل Batch كد هاي زير را اضافه نمائيم:
ECHO. >> XXX.bat
ECHO @ECHO OFF >> XXX.bat
ECHO start /wait %SYSTEMROOT%\system32\xxx.exe >> XXX.bat
ECHO start /wait regedit.exe /s zzz.reg >> XXX.bat
حال اگر اين فايل را اجرا كنيم ، فايل بچ پس از اجراي دستورات قبلي وقتي كه به سطور بالا برسد ، فايل بچ
ديگري با نام XXX.bat در كنار خود با محتواي بالا،درست حواهد كرد.
ميتوانيم در سطور ديگر فايل بچ خودمان دستور ساخت فايل هاي بچ ديگري را داده و يا دستور اجراي فايل
ساخته شده را بدهيم.
Magsoud
07-08-2017, 01:45 AM
نگفتی که آیا مورد بالا را امتحان کردی یا نه؟
با سلام
استاد من اینا رو تست کردم
درست بود فقط در یه مورد ایراد داد
توی خط دوم همونجا که مشخص میکنیم که محل کار فایل bat کجا باشه
@ECHO off
Set WorkDir=%~dp0
ECHO.
ECHO. Add FULL Drivers
date /t
ECHO.
time /t
ECHO.
timeout /t 2
Dism /IMage:mount /Add-Driver /Driver:Drivers /Recurse /ForceUnsigned
timeout /t 3
EXIT
وقتی خط دوم رو درست میکنه به جای این حرفا مسیر رو میزنه و این اشکالی در کار ایجاد میکنه اگه همین دستورات رو خودتون تست کنید میگیرید منظورم چیه
Magsoud
07-26-2017, 03:16 AM
سهند عزیز، روشی که توضیح دادم در اکثریت موارد بدون اشکال کار خواهد کرد. اشکالی که شما مواجه شدید، اشکالی
هست که گریزی از آن نیست.
علت این مسنله این است که تعدادی عبارات هستند که برای فایل Batch اساسی بوده و هر وقت فایل Batch با آن ها
روبرو شود فکر حواهد کرد که باید آن را اجرا کند.
که مثال شما یعنی عبارت %~dp0 یکی از همان استثنا هاست
Magsoud
07-26-2017, 04:39 PM
سهند عزيز ، براي اينكه فايل Batch شما درست كار كرده و عيب بالا را ندهد آن را بصورت زير اجرا كن:
@ECHO OFF
ECHO @ECHO off >> xxx.cmd
ECHO Set WorkDir=%%~dp0 >> xxx.cmd
ECHO. >> xxx.cmd
ECHO. >> xxx.cmd
ECHO date /t >> xxx.cmd
ECHO. >> xxx.cmd
ECHO time /t >> xxx.cmd
ECHO. >> xxx.cmd
ECHO timeout /t 2 >> xxx.cmd
ECHO. >> xxx.cmd
ECHO Dism /IMage:mount /Add-Driver /Driver:Drivers /Recurse /ForceUnsigned >> xxx.cmd
ECHO. >> xxx.cmd
ECHO timeout /t 3 >> xxx.cmd
ECHO EXIT >> xxx.cmd
ميخواهم خودت در كد ها دقت كرده و پيدا كني كه من چه تغييري داده ام كه درست كار كند و بعد از آن
چگونگي كار را در موارد اينگونه شرح خواهم داد.
استاد درخط سوم از دوتا % استفاده کردید
ECHO Set WorkDir=%%~dp0 >> xxx.cmd
یه سوال استاد چرا در جاهایی که از ECHO. استفاده کردیم این کلمه رو نمینویسه وخالی میذاره
Magsoud
07-29-2017, 01:13 AM
دستور .ECHO فقط جهت ساخت خط خالی هست.
تعدادی از عبارت ها هستند که فایل Batch نسبت به آنها حساسیت دارد که میتوانند مشکل ساز شوند که نمونه اش را
در مثال قبلی دیدیم که کاراکتر % باعث اشکال در کار شده بود.
توجه داشته باشید که هر جا کاراکتر % وجود داشته باشد برای جلوگیری از اشکال بایستی به تعداد % موجود این کاراکتر
را تکرار کنیم
صمیمی
08-28-2017, 06:29 AM
سلام خدمت استاد گرامی
میخواستم در مورد کاربرد دو دستور START و wait اطلاعاتی داشته باشم، به این خاطر که دیده ام بعضی جاها قبل از اسم فایل و دستور نصب در فایل بچ،دستورات استارت و wait را به کار برده اند. و آیا اینکه برای ساهت یک فایل بچ که حاوی دستورات است وجود این دو اجباری است؟
اگر لطف بفرمایید مختصر توضیحی بدهید.
Magsoud
08-29-2017, 08:00 PM
دستور Start جزو آن گروه از دستوزاتي هست كه بنده كمتر مورد استفاده ام بوده است.اين دستور وظيفه
اصلي اش راه انداحتن يك برنامه، دستور و يا يك فايل Batch ديگر است.براي مثال دستور زير باعث اجراي برنامه
notepad مي شود:
Start notepad.exe
بديهي است كه اين دستور هم مثل ديگر دستور ها داراي سويچ هاي مختلفي جهت مصارف مختلف است
يكي از سويچ هائي كه همراه اين دستور بكار ميرود سويچ W يا WAIT مي باشد.
وظيفه سويچ W يا WAIT در كنار دستور Start اين است كه برنامه اي را اجرا كرده و منتظر خاموش شدن آن
بشود.
براي مثال ميخواهيم كه برنامه notepad اجرا شود و پس از آن كه كاربر اين برنامه را خاموش كرد بطور خودكار
برنامه mspaint اجرا شود. براي اين مثال از دستور زير استفاده مي كنيم:
Start /WAIT notepad.exe
Start mspaint.exe
با دستور بالا برنامه notepad اجرا خواهد شد و دستور بعدي تا زمانيكه برنامه notepad بسته نشده اجرا
نخواهد شد.
بمحض اينكه برنامه notepad بسته شد دستور بعدي (در اين مثال برنامه mspaint) اجرا خواهد شد.
مسلم است كه كار هاي دستور Start را با دستورات ديگر هم ميتوان اجرا كزد و اينكه كدام بهتر است به
علايق كاربر بستگي دارد نه اينكه وجودش بنا به اشاره شما در پست قبلي اجباري باشد.
موفق باشيد.
صمیمی
08-31-2017, 02:39 AM
سلام خدمت استاد گرامی
بسیار عالی آموزش می دهید خیلی ممنونم.
سوال دیگری داشتم
بر فرض ما از طریق داس در حال نصب برنامه xyz.exe و abc.exe هستیم و می دانیم که احتمالا یکی ازین دو بعد از نصب خود را ریستارت می کند ولی نمی دانیم کدام
آیا دستوری هست که به داس بگوییم که از ریستارت شدن ویندوز به در هر حالتیجلوگیری کند؟
Magsoud
08-31-2017, 07:18 PM
بنده روشي براي انجام اين كار سراغ ندارم ولي اگر شما با انواع فايل ها آشنائي داشته باشيد، ميتوانيد
در مواردي عمل ري استارت را حذف كنيد.
براي مثال فرض كنيم كه برنامه XYZ.exe كه بالا اسم برديد، برنامه اي هست كه توسط نرم افزار Inno setup
كامپايل شده باشد. در اين صورت شما با اضافه كردن سويچ NORESTART به دستور نصب اين برنامه ميتوانيد
از ري استارت آن جلوگيري كنيد مثلا" با دستوري شبيه دستور زير فايل مربوطه هم مخفيانه نصب شده و هم
در صورتيكه نياز به ري استارت باشد، از ري استارت جلوگيري خواهد نمود.
XYZ.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-
با مثال بالا ديديم كه در بعضي از موارد (نه هميشه) ميتوان از ري استارت جلوگيري كرد.
با توجه به مسئله اي كه گفتيد، شما بايد بعد از اينكه يك برنامه را بروش هاي مختلف ساختيد، حتما" قبل
از تحويل دادن آن به خواهانش بايستي آن را امتحان كرده و مطمئن شويد كه بدون مشكل كار ميكند.
گاهي مي بيني كه يك فايل بخصوص در پايان كار ري استارت ميكند، و راهي هم پيدا نميكني كه از اين كار
جلوگيري كنيد.
دز اين صورت بهتر است اين فايل را آخرين فايلي قرار بدهي كه بايد كار كند كه در اين صورت چون بقيه برنامه ها
اجرا شده اند، لذا ري استارت مشكلي ايجاد نخواهد كرد.
صمیمی
09-01-2017, 03:24 AM
سلام خدمت استاد گرامی
راه حل جالبی گفتید خیلی جالب و کاربردی است.
یک سوال دیگر
دستوراتی که در قالب فایل هایی با پسوند bat نوشته می شوند در پسوندcmdهم کار می کنند؟ و آیا تفاوت خاصی بین دستورات این دو فرمت وجود دارد؟ و یک چیز دیگر
دستورات این چنین فایل ها در محیط پاور شل عمل میکنند و روی ویندوز7 هم جواب می دهند؟
Magsoud
09-01-2017, 07:18 PM
توجه داشته باشید که پسوند cmd میتواند هم تمام دستورات bat را عمل کند و هم اینکه این دستور در ویندوز ها
سریعتر و قوی تر از bat عمل میکند.
لذا بهتر است پسوند تمام فایل های bat را به cmd تغییر داده و بعد استفاده نمائی.
اما پاورشل خودش مستقل بوده و خیلی خوب هم عمل میکند ولی نمیدانم چرا هیچوقت علاقه ای پیدا نکردم که
با پاورشل کار کنم.
استاد من میخوام یه فایلی رو که exe هست توسط دستور بچ با یه فایل همنام خودش جایگزین کنم در حالت عادی خیلی راحت با xcopy یا copy اینکار انجام میشه ولی این فایل چون هم سیستمی هست و دوما باید با دستور Take Ownership دسترسی رو ازش بگیریم بعد کپی کنیم
حالا من میخوام همه اینکارا توسط یه فایل بچ امکانپذیر بشه در حالتی که فایل در پوشه system32 هست یعنی هم دسترسی هم کپی
این دستور چطوری باید بنویسیم
فایل اصلی در پوشه ای در دسکتاپ هست
در همون پوشه پوشه Mount قرار دارد که در داخلش یه ویندوز Mount شده
حالا من میخوام فایل AA.exe رو که در دسکتاپ در پوشه test هست با فایل aa.exe موجود در پوشه C:\Users\Sahand\Desktop\Test\Mount\Windows\System3 2\aa.exe
جایگزین کنم
فایل
aa.exe باید اول دسترسی بهش داده بشه بعد رونویسی بشه
Magsoud
09-15-2017, 02:50 PM
باید اول با دستوری نام فایل اصلی را عوض کنی (مثلا"با دستوری فایل aa.exe را تبدیل کنی به aa.exe.bak )
و سپس فایل مورد نظرت را کپی کنی
استاد یه سوال در مورد دستورات شرطی داشتم
مثال
من میخوام دستوری بنویسم که دو حالت داشته باشه
1- اگر مقدار رجیستری در مسیر HKEY_LOCAL_MACHINE\test\Microsoft\Windows وجود داشته باشد یا کلید مورد نظر وجود داشته باشد گزینه a و انجام دهد
2- اگر مقدار رجیستری در مسیر HKEY_LOCAL_MACHINE\test\Microsoft\Windows وجود داشته باشد یا کلید مورد نظر وجود داشته باشد گزینه b رو انجام دهد
Magsoud
11-01-2017, 04:27 PM
سهند عزيز، اگر خودت سوالت را يكبار مرور كني مي بيني كه سوال را نگفته اي بلكه فقط مطلبي را دو بار
تكرار كرده اي.
بهر حال براي سوالي كه بنده فكر ميكنم منظورت بود به شرح زير توجه نمائيد.
فرض ميكنيم كه شما ميخواهيد بدانيد كه آيا كليد زير در رجستري موجود هست يا نه
HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip
براي فهميدن اين مطلب ميتوان از دستور زير (در فايل Batch) استفاده نمود:
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip
pause
با اجراي دستور بالا كليد فايل و زير شاخه هاي آن مثل مثال زير ظاهر خواهد شد:
HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip
Path REG_SZ C:\Program Files\7-Zip\
Path32 REG_SZ C:\Program Files\7-Zip\
اگر بخواهيم بدانيم كه آيا در كليد بالا مقدار زير شاخه path چه هست ميتوان از دستور زير استفاده نمود:
REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip /v path
pause
با اين دستور بالا مثل مثال زير نام و مقدار زير شاخه path را خواهيد ديد:
HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip
path REG_SZ C:\Program Files\7-Zip\
حالا اگر بخواهيم بسته به بودن يا نبودن كليدي كاري انجام دهيم ميشود مثل مثال زير عمل كرد
با دستور زير اگر كليد xxx موجود بود فايل بچ خواهد نوشت كليد موجود است و اگر موجود نبود خواهد نوشت
موجود نيست:
@ECHO OFF
@reg query "HKEY_LOCAL_MACHINE\SOFTWARE\7-Zip" /v xxx >null
@if %ERRORLEVEL% EQU 0 (
cls
echo exists) else (
cls
echo not exists)
@PAUSE
من در مثال بالا از دستور echo استفاده كردم ولي شما ميتوانيد هر دستور ديگري را برحسب نياز استفاده
نمائيد.
موفق باشد.
استاد یه سوال دیگه
من یه فایل bat دارم حالا میخوام اگر کلید موجود بود کلمه yes رو نشون بده بعد ادامه فایل bat دستورات رو ادامه بده
اینم فایل bat
ECHO OFF
reg query "HKEY_LOCAL_MACHINE\test"
if %ERRORLEVEL% EQU 0 (
cls
echo yes) else (
cls
echo.
echo. ***test key UnLoad***)
Reg.exe add "HKEY_LOCAL_MACHINE\test\Classes\AllFilesystemObjec ts\shellex\ContextMenuHandlers\Move To" /ve /t REG_SZ /d "{C2FBB631-2971-11D1-A18C-00C04FD75D13}" /f
Reg.exe add "HKEY_LOCAL_MACHINE\test\Classes\AllFilesystemObjec ts\shellex\ContextMenuHandlers\Copy To" /ve /t REG_SZ /d "{C2FBB630-2971-11D1-A18C-00C04FD75D13}" /f
Magsoud
11-05-2017, 05:30 PM
سهند عزيز، اگر سوالتان را درست متوجه شده باشم، منظورتان اين است كه:
... فايل Batch در زمان لازم عبارت yes را نشان داده و چند لحظه صبر كند كه كاربر كاملا" متوجه شود (مثلا"
10 ثانيه صبر كند) و بعد دستورات بعدي را اجرا كند ........
اگر منظورتان همين است كه ميتوانيد بشرح زير عمل كنيد.و گرنه بيشتر شرح دهيد.
روش هاي متفاوتي براي مكث كردن و منتظر بودن وجود دارد كه من يك روش ساده را توضيح ميدهم.
اگر " Windows Server 2003 Resource Kit" را دانلود كزده و از فشردگي در آوريد، فايل هاي زيادي در داحل آن
خواهيد ديد كه يكي از آن ها sleep.exe نام دارد.
حال با فرض اينكه شما ميخواهيد فايل Batch شما پس از نشان دادن عبارت yes مدت 10 ثانيه صبر كرده و
بعد شروع به اجراي بقيه دستورات بكند بشرح زير عمل كنيد:
اول فايل sleep.exe را در كنار فايل Batch خود قرار دهيد.
حالا در فايل Batch بعد از سطري كه دستور نشان دادن عبارت yes را داده دستور زير را اضافه كنيد:
sleep 10
توضيح اينكه در دستور بالا عدد 10 تعداد ثانيه هائي هست كه برنامه قبل از اجراي دستورات بعدي صبر خواهد
كرد و شما ميتوانيد بجاي عدد 10 هر عدد ديگري را بنا بر نياز استفاده نمائيد.
نه استاد منظور من اینه فقط همون yes رو بنویسه بعد ادامه دستورات رو ادامه بده
توی دستوی که من نوشم وقتی کلید test توی مسیر رجیستری که مشخص کردم موجود بود yes رو مینویسه و وقتی هم نبود نوشته نه رو نشون میده ولی بقیه کار رو ادامه نمیده
مشکل من اینه که بعد از نشون دادن بلی یا خیر
درصورتی که بلی هست بقیه دستورات رو ادامه بده یعنی وقتی کلید test موجود بود دستورات رو ادامه بده ولی وقتی کلید test موجود نبود بعد پیغام نه فایل bat رو ببنده
ECHO OFF
reg query "HKEY_LOCAL_MACHINE\test"
if %ERRORLEVEL% EQU 0 (
cls
echo yes) else (
cls
echo no)
echo.
echo. ***test key UnLoad***)
Reg.exe add "HKEY_LOCAL_MACHINE\test\Classes\AllFilesystemObjec ts\shellex\ContextMenuHandlers\Move To" /ve /t REG_SZ /d "{C2FBB631-2971-11D1-A18C-00C04FD75D13}" /f
Reg.exe add "HKEY_LOCAL_MACHINE\test\Classes\AllFilesystemObjec ts\shellex\ContextMenuHandlers\Copy To" /ve /t REG_SZ /d "{C2FBB630-2971-11D1-A18C-00C04FD75D13}" /f
Magsoud
11-06-2017, 03:09 PM
اين نكته را توجه داشته باشيد كه بعضي از كد هاي موجود در رجستري فقط و فقط مخصوص همان ويندوز و
همان كامپيوتر است و اگر بخواهيد اين كد ها را در ويندوز و سيستم ديگر اعمال كنيد، اعمال نشده و اگر
به روش هائي اعمال نمائيد كار نخواهند كرد.
كد هائي مثل {C2FBB631-2971-11D1-A18C-00C04FD75D13} كه در مثال فايل Batch شما ديده ميشود
نمونه اي از اينگونه كد ها هست كه كد ويژه بوده و در كامپيوتر هاي ديگر اعمال نخواهند شد.
استاد کدها مثال هست شما یه چیز دیگه جایگزین کنید اصلا کاری به کدها ودستورا ندارم
من میخوام کاری کنم بعد نشون دادن بلی یا خیر اگه بلی بود ادامه فایل بچ رو اجرا کنه
یا اصلا بلی نشون نده اگه جواب بلی بود از خط ی که دستورات reg.exe هست شروع به اجرا کنه اگه هم جواب نه بود همون نه رو نشون بده
vBulletin v4.2.5, Copyright ©2000-2025, Jelsoft Enterprises Ltd.