پاسخ : دستورات فایلهای Batch
سلام خدمت استاد گرامی
بسیار عالی آموزش می دهید خیلی ممنونم.
سوال دیگری داشتم
بر فرض ما از طریق داس در حال نصب برنامه xyz.exe و abc.exe هستیم و می دانیم که احتمالا یکی ازین دو بعد از نصب خود را ریستارت می کند ولی نمی دانیم کدام
آیا دستوری هست که به داس بگوییم که از ریستارت شدن ویندوز به در هر حالتیجلوگیری کند؟
پاسخ : دستورات فایلهای Batch
بنده روشي براي انجام اين كار سراغ ندارم ولي اگر شما با انواع فايل ها آشنائي داشته باشيد، ميتوانيد
در مواردي عمل ري استارت را حذف كنيد.
براي مثال فرض كنيم كه برنامه XYZ.exe كه بالا اسم برديد، برنامه اي هست كه توسط نرم افزار Inno setup
كامپايل شده باشد. در اين صورت شما با اضافه كردن سويچ NORESTART به دستور نصب اين برنامه ميتوانيد
از ري استارت آن جلوگيري كنيد مثلا" با دستوري شبيه دستور زير فايل مربوطه هم مخفيانه نصب شده و هم
در صورتيكه نياز به ري استارت باشد، از ري استارت جلوگيري خواهد نمود.
کد:
XYZ.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-
با مثال بالا ديديم كه در بعضي از موارد (نه هميشه) ميتوان از ري استارت جلوگيري كرد.
با توجه به مسئله اي كه گفتيد، شما بايد بعد از اينكه يك برنامه را بروش هاي مختلف ساختيد، حتما" قبل
از تحويل دادن آن به خواهانش بايستي آن را امتحان كرده و مطمئن شويد كه بدون مشكل كار ميكند.
گاهي مي بيني كه يك فايل بخصوص در پايان كار ري استارت ميكند، و راهي هم پيدا نميكني كه از اين كار
جلوگيري كنيد.
دز اين صورت بهتر است اين فايل را آخرين فايلي قرار بدهي كه بايد كار كند كه در اين صورت چون بقيه برنامه ها
اجرا شده اند، لذا ري استارت مشكلي ايجاد نخواهد كرد.
پاسخ : دستورات فایلهای Batch
سلام خدمت استاد گرامی
راه حل جالبی گفتید خیلی جالب و کاربردی است.
یک سوال دیگر
دستوراتی که در قالب فایل هایی با پسوند bat نوشته می شوند در پسوندcmdهم کار می کنند؟ و آیا تفاوت خاصی بین دستورات این دو فرمت وجود دارد؟ و یک چیز دیگر
دستورات این چنین فایل ها در محیط پاور شل عمل میکنند و روی ویندوز7 هم جواب می دهند؟
پاسخ : دستورات فایلهای Batch
توجه داشته باشید که پسوند cmd میتواند هم تمام دستورات bat را عمل کند و هم اینکه این دستور در ویندوز ها
سریعتر و قوی تر از bat عمل میکند.
لذا بهتر است پسوند تمام فایل های bat را به cmd تغییر داده و بعد استفاده نمائی.
اما پاورشل خودش مستقل بوده و خیلی خوب هم عمل میکند ولی نمیدانم چرا هیچوقت علاقه ای پیدا نکردم که
با پاورشل کار کنم.
پاسخ : دستورات فایلهای Batch
استاد من میخوام یه فایلی رو که 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 باید اول دسترسی بهش داده بشه بعد رونویسی بشه
پاسخ : دستورات فایلهای Batch
باید اول با دستوری نام فایل اصلی را عوض کنی (مثلا"با دستوری فایل aa.exe را تبدیل کنی به aa.exe.bak )
و سپس فایل مورد نظرت را کپی کنی
پاسخ : دستورات فایلهای Batch
استاد یه سوال در مورد دستورات شرطی داشتم
مثال
من میخوام دستوری بنویسم که دو حالت داشته باشه
1- اگر مقدار رجیستری در مسیر HKEY_LOCAL_MACHINE\test\Microsoft\Windows وجود داشته باشد یا کلید مورد نظر وجود داشته باشد گزینه a و انجام دهد
2- اگر مقدار رجیستری در مسیر HKEY_LOCAL_MACHINE\test\Microsoft\Windows وجود داشته باشد یا کلید مورد نظر وجود داشته باشد گزینه b رو انجام دهد
پاسخ : دستورات فایلهای Batch
سهند عزيز، اگر خودت سوالت را يكبار مرور كني مي بيني كه سوال را نگفته اي بلكه فقط مطلبي را دو بار
تكرار كرده اي.
بهر حال براي سوالي كه بنده فكر ميكنم منظورت بود به شرح زير توجه نمائيد.
فرض ميكنيم كه شما ميخواهيد بدانيد كه آيا كليد زير در رجستري موجود هست يا نه
کد:
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 استفاده كردم ولي شما ميتوانيد هر دستور ديگري را برحسب نياز استفاده
نمائيد.
موفق باشد.
پاسخ : دستورات فایلهای Batch
استاد یه سوال دیگه
من یه فایل bat دارم حالا میخوام اگر کلید موجود بود کلمه yes رو نشون بده بعد ادامه فایل bat دستورات رو ادامه بده
اینم فایل bat
کد HTML:
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\AllFilesystemObjects\shellex\ContextMenuHandlers\Move To" /ve /t REG_SZ /d "{C2FBB631-2971-11D1-A18C-00C04FD75D13}" /f
Reg.exe add "HKEY_LOCAL_MACHINE\test\Classes\AllFilesystemObjects\shellex\ContextMenuHandlers\Copy To" /ve /t REG_SZ /d "{C2FBB630-2971-11D1-A18C-00C04FD75D13}" /f
پاسخ : دستورات فایلهای Batch
سهند عزيز، اگر سوالتان را درست متوجه شده باشم، منظورتان اين است كه:
... فايل Batch در زمان لازم عبارت yes را نشان داده و چند لحظه صبر كند كه كاربر كاملا" متوجه شود (مثلا"
10 ثانيه صبر كند) و بعد دستورات بعدي را اجرا كند ........
اگر منظورتان همين است كه ميتوانيد بشرح زير عمل كنيد.و گرنه بيشتر شرح دهيد.
روش هاي متفاوتي براي مكث كردن و منتظر بودن وجود دارد كه من يك روش ساده را توضيح ميدهم.
اگر " Windows Server 2003 Resource Kit" را دانلود كزده و از فشردگي در آوريد، فايل هاي زيادي در داحل آن
خواهيد ديد كه يكي از آن ها sleep.exe نام دارد.
حال با فرض اينكه شما ميخواهيد فايل Batch شما پس از نشان دادن عبارت yes مدت 10 ثانيه صبر كرده و
بعد شروع به اجراي بقيه دستورات بكند بشرح زير عمل كنيد:
اول فايل sleep.exe را در كنار فايل Batch خود قرار دهيد.
حالا در فايل Batch بعد از سطري كه دستور نشان دادن عبارت yes را داده دستور زير را اضافه كنيد:
sleep 10
توضيح اينكه در دستور بالا عدد 10 تعداد ثانيه هائي هست كه برنامه قبل از اجراي دستورات بعدي صبر خواهد
كرد و شما ميتوانيد بجاي عدد 10 هر عدد ديگري را بنا بر نياز استفاده نمائيد.