پاسخ : دستورات فایلهای Batch
نقل قول:
نوشته اصلی توسط
سهند
1
...اگر بخواهیم که فایل بچ بفهمد که به ترتیب پوشه های دیگری هم هستند که به وقتش اونا رو هم اجرا کنه باید به ترتیب در سطر سوم و چهارم هم بهش این دستور رو بدهیم که فایلها کجا هستند منتها با این تفاوت که بجایش Set WorkDir=xxx بذاریم
سهند عزیز
نام متغیر برای هر سطر باید متفاوت باشد فرضا" اگر سطر اول عبارت Set WorkDir داریم درسط دوم نباید کلمه WorkDir
باشد بلکه بجایش باید هر عبارتی غیر از این کلمه قرار بدهیم مثلا" set XXX و یا set BB و یا set Sahand
کلمه ای که بعد از دستور set نوشته میشود متغیر است.
اگر در یک فایل Batch فرضا" 10 تا متغیر تعریف کرده باشیم ، همه این ده متغیر ها باید نامی متفاوت داشته باشند.
نباید نام متغیر ها مثل هم باشد.
اگر نام همه متغیر ها را مثل هم بنویسی ، فایل Batch فقط آخرین متغیر را اجرا خواهد کرد.
پاسخ : دستورات فایلهای Batch
استاد اگر بخواهیم یک فایل رجیستری مربوط به تنظیمات یک برنامه رو توسط فایل بچ اجرا کنیم که بصورت مخفی باشد دستور را باید به چه شکلی بنویسیم
پاسخ : دستورات فایلهای Batch
با فرض اینکه شما فایلی با نام xxx.reg داشته باشید ، با اجرای دستور زیر فایل فوق بصورت مخفی به رجستری اضافه خواهد شد:
پاسخ : دستورات فایلهای Batch
نکاتی مفید در رابطه با دستور 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\CurrentVersion\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\CurrentVersion\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 درست شده است.
اگر مختصری به دستورات دقت کنید متوجه خواهید شد که این کار چگونه انجام شده
تا بعد.
پاسخ : دستورات فایلهای Batch
در جلسه قبل مثال هائی را دیدیم که در آن ها از علایم << استفاده کرده بودیم.
در این قسمت از بحث طرز کار علامت < و تفاوت آن را با علایم << بررسی میکنیم.
این دو نوع علامت و برخی علایم دیگر را در اصطلاح کامپیوتر 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\CurrentVersion\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 نام دارد که من یکی دو بار در مثال های گذشته از آن استفاده کردم و کسی سوالی
نپرسید یعنی اینکه تمام کسانیکه مثال های این تاپیک را دنبال کرده اند ،طرز استفاده از این اپراتور را میدانند.
بهر حال بحث این اپراتور ها را در اینجا تمام کرده و بقیه موارد مربوطه را بخودتان واگذار میکنم.
پاسخ : دستورات فایلهای Batch
نمیدانم تا کنون دقت کرده اید یا نه ، در همه ویندوز ها داخل پوشه 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 ارایه خواهم کرد.
پاسخ : دستورات فایلهای Batch
لیست تعدادی از متغیر های Environment Variables
1. در ویندوز XP
کد HTML:
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
کد HTML:
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)
=============================================================================
پاسخ : دستورات فایلهای Batch
دستور 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
همانطور که می بینید برای نشانداده شدن اعداد 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 در این مثال) تکرار کرده و بعد بسته خواهد شد.
امیدوارم توانسته باشم طرز کار این دستور را درست و مفهوم تشریح کنم.
در جلسات بعد با نکات بیشتری آشنا خواهیم شد.
پاسخ : دستورات فایلهای Batch
سلام
استاد عزيز قبلش از سوال پيشپا افتادهام عذرخواهي ميکنم!
با وجود استفاده از دستور pause، چرا پنجره بسيار سريع باز و بسته ميشه؟ (طوريکه محتواش خونده نميشه!)
درضمن چرا با وجود سرعت بيشتر در خوندن فرمت cmd که windows NTcommand Script هست از فرمت bat که MS-DOS Batch File هست استفاده ميشه؟
سپاس
پاسخ : دستورات فایلهای Batch
نقل قول:
نوشته اصلی توسط
eDvArDo
.....
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
راه دیگر این است که یک فایل Batch با دستور زیر اجرا کنید که پس از اجرا خواهید دید فایلی بنام aaa.txt در کنار فایل Batch ساخته
شده که در داخلش اعداد 1 تا 10 نوشته شده است:
کد:
for %%A in (1 2 3 4 5 6 7 8 9 10 ) do echo %%A >>aaa.txt
لطفا" نتیجه کار را اعلام فرمائید