این نکته به ادامه سری در مورد استفاده از فایل های دسته ای می پردازد. پیشنهاد می شود از نکات قبلی (دوباره) بازدید کنید تا از جایی که رها کردیم ادامه دهیم. تا اینجا دستورات زیر را پوشش دادهایم: DIR، REM، ECHO، FIND، TIME و TIMEOUT. ما همچنین از عملگرهای زیر استفاده کردهایم: خروجی به فایل (>)، remark (::)، بدون echo (@)، لوله (|)، و concatenate (&). در نهایت، می دانیم که از پارامترهای ارسال شده به یک فایل دسته ای از طریق ترکیبات %1، %2، %3 و غیره استفاده می کنیم.
این نکته بر روی دستورات مربوط به انجام پردازش شرطی در یک فایل دسته ای تمرکز می کند. اینها عبارتند از IF ، CHOICE ، GOTO و نحو خاص " :label ".
من یک فایل دسته ای بسیار مفید به نام Do.bat دارم. این چیزی بیشتر از یک "پوشش" است که برنامه ها را بدون توجه به محل اقامت این برنامه ها اجرا می کند. بنابراین، برای مثال، اگر بخواهم برنامه ای به نام Prog1.exe را اجرا کنم، به سادگی تایپ می کنم
C:Bat> DO Prog1
اگر می خواستم Prog2.exe را اجرا کنم تایپ می کردم
C:Bat> DO Prog2
زیبایی Do.bat این است که وقتی آن را ساختم، لوکیشن های تمام برنامه هایی را که می خواهم با آنها کار کند را وارد کردم. بنابراین لازم نیست به یاد داشته باشم که مثلاً Prog1.exe در "C:ProgramsMy ProgramsProg1.exe" زندگی می کند و Prog2.exe در "D:UtilitiesBarryProg2.exe" زندگی می کند. . به علاوه، من هرگز مجبور نیستم نام مسیرهای طولانی را دوباره تایپ کنم.
فایل Do.bat من به شکل زیر است:
@ECHO OFF GOTO %1 :Prog1 "C:ProgramsMy ProgramsProg1.exe" GOTO Done :Prog2 "D:UtilitiesBarryProg2.exe" GOTO Done :Done
خط اول فایل تضمین می کند که خطوط دیگر نمایش داده نخواهند شد. به دنبال آن خط GOTO قرار می گیرد که به عنوان پارامتر نام برچسبی را می گیرد که کنترل باید به آن منتقل شود. و اتفاقاً این برچسب نیز پارامتری است که برای شروع به Do.bat داده شده است. بنابراین وقتی Do.bat را فراخوانی میکنید و «Prog1» را بهعنوان پارامتر ارسال میکنید، فایل bat. یک GOTO به برچسبی به نام «:Prog1» انجام میدهد (اینها به حروف بزرگ و کوچک حساس نیستند). اجرا به صورت متوالی از بالا به پایین دنبال می شود، بنابراین دستور بعدی که باید اجرا شود دستوری است که Prog1.exe را فراخوانی می کند. پس از اتمام این برنامه، فایل bat. با اجرای دستور "GOTO Done" ادامه می یابد. برچسب ":Done" آخرین خط فایل است، بنابراین وقتی به این نقطه رسید، فایل bat. خارج می شود. (یک EXIT وجود دارددستور، اما اگر بخواهیم آن را اجرا کنیم، نه تنها فایل bat. بلکه کل جلسه CMD را خاتمه می دهد، که احتمالاً آن چیزی نیست که شما می خواهید انجام دهید.)
میتوانید از دستور CHOICE استفاده کنید و شاید یک منوی ساده ایجاد کنید که از آن برنامهای را برای اجرا انتخاب کنید. در این مورد ممکن است فایلی به نام Choice.bat بسازم که به شکل زیر باشد:
@ECHO OFF ECHO Select 1 to run Prog1 ECHO Select 2 to run Prog2 ECHO Select Q to quit CHOICE /C 12Q /T 10 /D Q GOTO %ERRORLEVEL% :3 ECHO Quitting GOTO Done :2 "D:UtilitiesBarryProg2.exe" GOTO Done :1 "C:ProgramsMy ProgramsProg1.exe" GOTO Done :Done
دستور CHOICE به کاربر دستوری برای وارد کردن 1، 2 یا Q می دهد (به طور پیش فرض، به حروف بزرگ و کوچک حساس نیست). هر شخصیت دیگری نادیده گرفته می شود. سوئیچ /T می گوید تا 10 ثانیه به پایان می رسد، در این زمان روش به گونه ای عمل می کند که گویی گزینه Q انتخاب شده است ( /D Q می گوید گزینه پیش فرض Q است). پس از اجرای دستور CHOICE ، متغیر %ERRORLEVEL% روی مقدار ترتیبی گزینه انتخاب شده تنظیم می شود. بنابراین اگر کاربر 1 را انتخاب کرد، %ERRORLEVEL% روی 1 تنظیم می شود. اگر کاربر 2 را انتخاب کرد، %ERRORLEVEL% روی 2 تنظیم می شود. و اگر کاربر Q را انتخاب کرد، %ERRORLEVEL% روی 3 تنظیم می شود. سپس برچسب نشان داده شده با %ERRORLEVEL% را می رویم و عمل درخواستی را انجام می دهیم.
من می توانم یک نکته کامل در مورد دستور IF بنویسم، اما اصول اولیه این است که شما چیزی شبیه به:
IF arg1 operator arg2 command
در جایی که "arg1" و "arg2" آرگومان هایی هستند که در حال آزمایش هستند، "اپراتور" یکی از EQU، NEQ، LSS، LEQ، GTR، GEQ است (یعنی برابر، نه برابر، کمتر از، و غیره)، و "فرمان" عبارت است از یک فرمان خط فرمان
یک فایل دستهای ساده برای اکو P1 در صورت وجود ممکن است به شکل زیر باشد:
@ECHO OFF IF [%1] EQU [] ECHO No Parameter passed IF [%1] NEQ [] ECHO Parameter P1 is %1 GOTO:eof
(من عادت کردم از [] در اطراف استدلال هایم استفاده کنم تا از برخی عوارض جلوگیری کنم.)
طعم های دیگری از IF نیز وجود دارد. به عنوان مثال، میتوانید سطح خطا را آزمایش کنید، وجود فایلی را آزمایش کنید، عبارت ELSE را اضافه کنید و غیره.
در خط فرمان، IF/ را انجام دهید؟ و شما ایده خوبی از کارهایی که می توانید انجام دهید به دست خواهید آورد.