دوره‌ های آموزشی نووا
فوریه 10, 2021

متغیر ها در بچ اسکریپت

Avatar photo
برنامه نویس MERN Stack
متغیر ها در بچ اسکریپت

در فصل اول با عنوان آموزش ساخت فایل bat نحوه ایجاد یک فایل bat ساده را توضیح دادم، در این فصل شما را با متغیر ها در بچ اسکریپت (Variables) آشنا خواهم نمود. اینکه متغیر چیست و چگونه میتوان با دستور set در فایل bat متغیر ایجاد نمود. همچنین با متغیر های محیطی و Modifier ها آشنا خواهید شد. همراه با نووا بلاگ باشید.

پیشنهادی: اگر به یاد گیری زبان برنامه نویسی Batch Script علاقه دارید حتما به صفحه آموزش بچ اسکریپت سر بزنید.

متغیر یا Variable چیست؟

متغیر یکی از اصلی ترین عناصر هر زبان برنامه نویسی میباشد. اگر از متغیر استفاده نشود، برنامه نویسی هم ممکن نخواهد بود. حال متغیر یا Variable چیست؟ به زبان ساده متغیر یک جعبه با یک نام مشخص است که با صدا زدن نام جعبه به محتوای درون آن دسترسی پیدا میکنیم. برنامه نویسان، زمانی از جعبه متغیر استفاده میکنند که محتوای درون آنرا ندانند. (در واقع محتوای درون جعبه قابل تغییر یا متغیر است) برای مثال:

فرم ثبت نام یک سایت را در نظر بگیرید، معمولا در هر فرمی از کاربر اطلاعاتی درخواست میشود: مثل نام، نام خانوادگی، رمز عبور، آدرس ایمیل و … اگر حدس شما این است که هر کدام از این ورودی ها یک متغیر هستند، کاملا درست حدس زده اید. در واقع برنامه نویس، اطلاعات هویتی کاربر را نمیداند از اینرو از جعبه های متغیر استفاده میکند تا اطلاعات کاربر را درون آنها قرار داده تا در مکان های مورد نیاز سایت استفاده کند. (مثل نمایش اطلاعات هویتی شما در شبکه های اجتماعی)

متغیر ها در بچ اسکریپت
متغیر ها در بچ اسکریپت

متغیر ها در بچ اسکریپت

در بچ اسکریپت برای ایجاد متغیر از دستور set استفاده میشود و برای دسترسی به محتوای متغیر ها نام آنها را بین دو علامت % قرار میدهیم. (برای مثال: %TEMP%) به طو کلی در بچ اسکریپت سه نوع متغیر وجود دارد:

متغیر های معمولی (Variables): مثل باقی زبان های برنامه نویسی، زمانیکه در بچ اسکریپت یک متغیر با دستور set ایجاد میکنید متغیر عادی محسوب میشود.

متغیر های محیطی (Environmental Variables): در سیستم عامل ویندوز متغیر های محیطی از پیش توسط سیستم عامل ایجاد شده اند و محتوای آنها اطلاعات مرتبط با کاربر، سیستم عامل و یا سخت افزار است. مثلا متغیر %Temp% که محتوای آن مسیر پوشه Temporary کاربر فعال است.

متغیر های ویژه (Special Variables): اندکی زود است تا با متغیر های ویژه که به Modifiers ها معروف هستند آشنا شوید. تنها کافیست بدانید شما متغیر های ویژه را نمیسازید و فقط از آنها استفاده میکنید.

همانطور که گفتم برای ساخت Variable باید از دستور SET استفاده نمود. نحوه ساخت Variable به این صورت است: ابتدا دستور Set را وارد کنید، سپس نام Variable را مشخص کرده و پس از آن از یک علامت مساوی برای مشخص نمودن محتوای متغیر استفاده کنید و مقدار متغیر را در جلوی علامت مساوی بنویسید. برای مثال:

set web=https://novablog.ir

در مثال بالا یک متغیر با نام Web و مقدار https://NovaBlog.ir ایجاد شده است.

برای نمایش محتوای Variable ها میتوانید از دستور echo استفاده کنید. ابتدا دستور Echo را تایپ کنید سپس اسم variable را در بین دو علامت %% قرار داده تا محتوای Variable به صورت متنی نمایش داده شود. برای مثال:

echo %web%

همانطور که قبل تر توضیح متغیر های وجود دارد که توسط ویندوز ساخته شده اند و به آنها متغیر های محیطی گفته میشود. اگر میخواهید کلیه متغیر های فعال و قابل استفاده در ویندوز را مشاهده کنید باید دستور set را در خط فرمان ویندوز وارد کنید. برای مثال:

set

حال اجازه دهید از متغیر ها در یک فایل بچ استفاده کنیم.

@echo off
 Title Why Use Variables
 Set LS=D:\Data\Backup\Linux\Softwares\
 XCOPY /s F:\ %LS%
 XCOPY /s G:\ %LS%
 DIR %LS% 

در اسکریپت بالا ابتدا با دستور SET یک Variable با نام LS ساخته شد که محتوای آن D:\Data\Backup\Linux\Softwares\ میباشد. سپس در دستورات بعد بجای تایپ مسیر طولانی از Variable آن مسیر یعنی %LS% استفاده شد. که دقیقا معادل همان مسیر است.

متغیر های Local و Global

شما میتوانید از Variable ها در دو حالت Local و Global استفاده کنید در حالت Local یا محلی، Variable ها محدود به بخشی از فایل BATCH میباشند که با دستور SETLOCAL شروع شده و با دستور ENDLOCAL یا EOF در فایل BATCH به پایان میرسد. یعنی پس از EOF یا دستور ENDLOCAL متغیر های ساخته شده از بین میروند. اما Variable های Global در کل Session فایل Batch وجود دارند و میتوان از آنها استفاده نمود. به مثال زیر توجه کنید:

@echo off
 Title Global Variable VS Local Variable
 color 0A
 mode CON LINES=20 COLS=80
 echo %TEMP%
 PAUSE
 SETLOCAL
 SET TEMP=NOW ITS BECOME LOCAL
 ECHO %TEMP%
 PAUSE
 ENDLOCAL
 ECHO %TEMP%
 PAUSE

نتایج اجرای اسکریپت:

همانطور که در اسکریپت بالا مشاهده میکنید ابتدا با دستور ECHO محتوای Variable یا متغیر %TEMP% نمایش داده شده سپس با دستور SETLOCAL مشخص شده از این نقطه به بعد کلیه Variable های که قرار است ساخته شوند باید Local یا محلی باشند پس از آن با استفاده از دستور SET محتوا یا مقدار متغیر %TEMP% به “Now Its Become Local” تغییر داده شده و دوباره با دستور ECHO محتوای جدید متغیر %TEMP% نمایش داده میشود (NOW ITS BECOME LOCAL) و پس از آن دستور ENDLOCAL اضافه شده تا عملکرد Variable های Local به پایان رسد و باز با دستور ECHO مقدار اصلی متغیر %TEMP% نمایش داده میشود.

به طور کلی اگر از دستورات SETLOCAL و ENDLOCAL در فایل Batch استفاده نشود کلیه Variable ها به صورت Global بوده و میتوانند توسط دیگر فایلهای Batch دیده و ویرایش شوند. برای درک بهتر این موضوع بگذارید آنرا برایتان با یک مثال روشن کنم:

فرض کنید سه فایل Batch دارید که در هر کدام از آنها یک Variable با نام Title ساخته اید اما مقدار های متفاوتی به آنها داده اید. در صورتی که از دستورات SETLOCAL و ENDLOCAL در هر یک از این فایلهای Batch استفاده نکرده باشید مقدار Variable های هر یک از این فایلها روی دیگری اثر گذاشته و مقدار Variable باقی فایلهای Batch را نیز تغییر میدهند.

در هر فایل Batch میتوان 32 بار از دستور SETLOCAL استفاده نمود. یعنی مثلا میتوان به Variable یا متغیر Title سی و دو مقدار متفاوت را در یک فایل Batch اطلاق کرد بدون اینکه مقدار هیچ کدام از آنها روی دیگری اثر بگذارد.

دستور SETLOCAL دارای چهار پارامتر است که این پارامتر ها عملکرد و توانایی های فایل Batch را تغییر میدهند. این پارامتر ها شامل EnableExtensions – DisableExtensions – EnableDelayedExpansion – DisableDelayedExpansion میباشند. در ادامه به بررسی تک تک این پارامترها میپردازیم:

  1. کار پارامتر EnableExtensions افزایش تواناییهای دستورات و استفاده از دستوراتی میباشد که در حالت DisableExtensions نمیتوان از آنها در فایل Batch استفاده نمود. این دستورات شامل موارد زیر میباشند:
MD – MKDIRCD – CHDIRCOLORDEL – ERASE
SETPOPDPUSHDPROMPT
FORIFENDLOCALSETLOCAL
STARTGOTOSHIFTCALL
  FTYPEASSOC

به صورت پیشفرض پارامتر EnableExtensions در فایل Batch فعال میباشد و برای غیر فعال سازی آن باید از دستور SETLOCAL به همراه پارامتر DisableExtensions استفاده کنید.

  • کار پارامتر EnableDelayedExpansion باز کردن Variable ها در زمان خوانده شدن میباشد نه در زمان تجزیه. به صورت عادی Variable ها در زمان تجزیه باز میشوند. اما با استفاده از پارامتر EnableDelayedExpansion میتوان Variable ها را با علامت تعجب نوشت و آنها را در زمان خوانده شدن استفاده نمود.

برای درک بهتر عملکرد پارامتر EnableDelayedExpansion به اسکریپت زیر توجه کنید:

@ECHO OFF
 SETLOCAL ENABLEDELAYEDEXPANSION
 TITLE ENABLEDELAYEDEXPANSION
 MODE CON COLS=80 LINES=25
 COLOR 0A
 SET VAR=NORMAL VARIABLE
 SET VAR=DELAYED VARIABLE & ECHO %VAR% VS !VAR!
 PAUSE

نتایج اجرای اسکریپت:

NORMAL VARIABLE VS DELAYED VARIABLE
Press any key to continue . . .

همانطور که در اسکریپت بالا مشاهده میکنید ابتدا با دستور SET یک Variable با نام VAR و محتوای NORMAL VARIABLE ساخته شده سپس در خط بعد دوباره با دستور SET یک Variable دیگر با همان نام VAR درست شده که اینبار محتوای آن DELAYED VARIABLE میباشد. پس از مقدار DELAYED VARIABLE یک علامت & گذاشته شده تا بتوان در همان خط یک دستور دیگر هم اضافه نمود، که آن دستور ECHO میباشد در جلوی دستور ECHO یک بار %VAR% تایپ شده که در واقع همان Variable عادی است سپس یکبار هم !VAR! تایپ شده که یک Delayed Variable میباشد. اگر بخش نتایج اجرای اسکریپت را با دقت مشاهده کنید میبینید که محتوای متغیر %VAR% جمله NORMAL VARIABLE میباشد اما محتوای متغیر !VAR! جمله DELAYED VARIABLE است.

این بدان معناست که با استفاده از ویژگی EnableDelayedExpansion میتوان از محتوای یک Variable در هنگام خوانده شدن آن Variable با علامت تعجب استفاده نمود.

برای درک بهتر کاربرد EnableDelayedExpansion یک فایل Batch بسازید سپس با استفاده از دستور SET یک Variable درست کنید و پس از آن با یک علامت & در همان خط دستور ECHO را تایپ کنید و در جلوی دستور ECHO نام Variable ساخته شده را بنویسید. برای مثال:

SET VARIABLE=ITS BE A NORMAL VARIABLE & ECHO %VARIABLE%

معمولا بیشترین کاربرد پارامتر EnableDelayedExpansion برای دستورات IF و FOR میباشد که در فصلهای بعد به آنها اشاره خواهم نمود.

دستور SET دارای دو پارامتر /A و /P میباشد که پارامتر /A برای محاسبه کردن چند عدد با هم استفاده میشود و پارامتر /P برای اضافه کردن مقدار Variable به صورت دستی توسط کاربر پایانی استفاده میشود. یعنی پس از اجرای فایل Batch از کاربر پرسیده میشود که مقدار Variable را وارد کند.

انجام محاسبات با دستور SET

همانطور که گفتم پارامتر /a در دستور set برای محاسبات استفاده میشود. نحوه استفاده از پارامتر /a بسیار ساده است کافیست بعد از پارامتر /a نام Variable خود را مشخص کنید سپس یک مساوی بگذارید و بعد از آن دو عدد را با علامت + یا – یا * و یا / تایپ کنید و حاصل آن را در خط بعد مشاهده کنید. برای مثال:

مثالی از جمع کردن دو عدد:

SET /A RESULT = 10 + 30

مثالی از کسر کردن دو عدد:

SET /A RESULT = 30 - 10

مثالی از ضرب کردن دو عدد:

SET /A RESULT = 10 * 30

مثالی از تقسیم کردن دو عدد:

SET /A RESULT = 30 / 10

جدا از محاسبه کردن عدد ها شما میتوانید خود Variable ها را هم در محاسبه استفاده کنید. برای اینکار کافیست خود Variable را به همراه علامت + یا – یا * و یا / در بین دو علامت “” قرار دهید. برای مثال:

SET /A "RESULT+" = 10
 SET /A "RESULT-" = 10
 SET /A "RESULT/" = 10
 SET /A "RESULT*" = 10 

شما میتوانید با یک دستور SET چندین عمل محاسبه را پشت سر هم انجام دهید. برای مثال:

SET /A RESULT = 150 * 30 * 40 - 200 -200 + 400

وارد کردن Interactive مقدار یا محتوای Variable ها

شما میتوانید با استفاده از پارامتر /P در دستور SET اضافه نمودن محتوا یا مقدار Variable های خود را به عهده شخص اجرا کننده فایل Batch بگذارید. یعنی مثلا یک Variable بسازید که محتوای آنرا کاربر پایانی یا همان شخص اجرا کننده فایل Batch وارد کند. برای درک بهتر این موضوع به اسکریپت زیر توجه کنید:

@echo off
 Title MAKE MENU WITH SET COMMAND
 Color 0F
 Mode CON LINES=25 COLS=80
 Echo PLEASE ENTER YOUR USERNAME
 Set /P USERNAME= TYPE YOUR NAME:
 Echo PLEASE ENTER YOUR PASSWORD
 Set /P PASSWORD= TYPE YOUR PASSWORD:
 Echo Your username is %USERNAME% and your password is %PASSWORD%
 Pause

نتایج اجرای اسکریپت:

دستور set

در اسکریپت بالا دو Variable با نام های USERNAME و PASSWORD ساخته شده که مقدار یا محتوای این Variable ها را باید کاربر پایانی وارد کند. در این مثال فرد اجرا کننده اسکریپت برای متغیر USERNAME کلمه TMLMANAGER را وارد نموده و برای متغیر PASSWORD کلمه JUSTLEARN را اضافه نموده است. سپس با استفاده از دستور ECHO پیامی نمایش داده که از Variable های USERNAME و PASSWORD در آن استفاده شده تا آنچه کاربر پایانی به عنوان مقدار یا محتوای این دو Variable وارد میکند نمایش داده شوند.

معمولا بیشتر مواقع از دستور SET /P برای ساخت منو در فایل Batch استفاده میشود تا کاربر اجرا کننده فایل Batch حق انتخاب داشته باشد.

متغیر های ویژه یا Special Variable

در Batch Script جدا از Variable های از پیش ساخته شده همانند %TEMP% – %USERNAME% و … ، Variable های دیگری هم وجود دارند که به آنها Special Variable میگویند. (البته خود من نام Special Variable یا متغیر ویژه را برای تفکیک این متغیر ها از متغیر های عادی گذاشته ام تا کاربران فرق این دو نوع Variable را از هم تشخیص دهند. معمولا به Special Variable ها Idiom یا Modifier هم گفته میشود.) این Variable ها به شما کمک میکنند تا مثلا مسیر اجرای فایل Batch خود را پیدا کنید یا اینکه نام فایل Batch اجرا شده را مشاهده کنید. در جدول زیر فهرست بعضی از Modifier ها را با عملکرد آن توضیح داده ام:

نام Variableعملکرد Variable
%~0مشخص کننده Argument صفر یا نام خود فایل Batch اجرا شده.
%~Dمشخص کننده Letter درایوی (Drive) که فایل Batch از آن درایو اجرا شده (مثلا C:\).
%~Pمشخص کننده مسیری (Path) که فایل Batch از آنجا اجرا شده است.
%~Fنام و مسیر کامل (Full Qualified Path) فایل Batch اجرا شده را مشخص میکند.

عدد صفر به همراه علامت درصد (%0) در واقع Argument صفر میباشد که مشخص میکند نام فایل Batch اجرا شده چیست. همانطور که در جدول بالا مشاهده میکنید گزینه %~0 در واقع همان فایل Batch اجرا شده میباشد. و باقی موارد مثل D و P و F مربوط به نمایش مسیر میباشند. یعنی باید گزینه های بعدی را همراه با عدد 0 استفاده کنید. برای مثال:

@ECHO OFF
 TITLE SPECIAL VARIABLE AND ARGUMENTS
 COLOR 0A
 MODE CON COLS=80 LINES=25
 ECHO FOR ONLY TO SHOW DRIVE LETTER USE FOLLOWING SYNTAX
 ECHO %~D0
 ECHO FOR DRIVE LETTER PLUS PATH USE THE FOLLOWING SYNTAX
 ECHO %~DP0
 ECHO FOR SHOW FULL QUALIFIED PATH USE THE FOLLOWING SYNTAX
 ECHO %~F0
 PAUSE 

نتایج اجرای اسکریپت:

دستور set
دستور set – ایجاد متغیر در cmd

همانطور که در اسکریپت بالا مشاهده میکنید میتوان از Variable های ویژه هم به صورت ترکیبی استفاده نمود و هم به صورت انفرادی. مثلا برای نمایش نام درایو به همراه آدرس آن باید حرف D را در کنار حرف P گذاشت تا نتیجه مورد نظر به دست آید. (%~DP0)

زمانیکه یک فایل Batch را به صورت Run As Administrator اجرا میکنید در صورتی که UAC ویندوز فعال باشد برنامه به صورت خودکار از آدرس C:\Windows\System32 اجرا میشود. برای جلوگیری از تغییر مسیر اجرای برنامه میتوان از دستور CD /D %~DP0 در خط اول فایل Batch استفاده نمود با اضافه نمودن این دستور مسیر اجرای فایل Batch از C:\Windows\System32 به مسیر جاری فایل Batch تغییر میکند. برای مثال:

@ECHO OFF
 TITLE Run As Administrator
 COLOR 0A
 MODE CON COLS=80 Lines=25
 ECHO %CD%
 PAUSE
 CD /D %~DP0
 ECHO %CD%
 PAUSE 

نتایج اسکریپت اجرا شده:

متغیر ها در بچ اسکریپت
متغیر ها در بچ اسکریپت

اسکریپت بالا به صورت Run As Administrator اجرا شده، در این اسکریپت ابتدا با دستور ECHO %CD% مسیر جاری اسکریپت نمایش داده میشود که در آدرس C:\Windows\System32 میباشد سپس با دستور CD /D %~DP0 مسیر اسکریپت از C:\Windows\System32 به مسیری که فایل Batch در آنجا قرار دارد تغییر پیدا میکند (C:\Users\Home\Desktop) و در آخر دوباره با دستور ECHO %CD% مسیر جاری فایل Batch نمایش داده میشود.

35 پاسخ به “متغیر ها در بچ اسکریپت”

  1. Avatar photo محمدرضا گفت:

    سلام ، ببخشید اگه میشه کاربرد سوئیچ /p رو در بچ فایل ها بگین منتظرم ، خیلی ممنون

    • سلام محمدرضا جان
      با سویچ /p میتونید محتوای یک متغیر رو از کاربر درخواست کنید. برای مثال:
      set /p Name=Please enter your name
      همه این موارد رو بهمراه مثال در کتاب آموزش Batch Script توضیح دادم.

  2. Avatar photo moslem.K گفت:

    سلام می خوام بدونم راهی وجود داره که به جای استفاده از راست کلیک و گزینه run as administrator و بدون پسورد administrator، برنامه ای را با خط فرمان و به عنوان administrator اجرا کرد؟ ممنونم از مطالب مفیدتان. در اسرع وقت منتظر جوابتان هستم.

    • سلام عزیز
      اگر منظورتون اینکه بدون وارد کردن رمز حساب ادمین بشه دسترسی ادمین داشت جواب خیر
      ولی اگر بخواهید به صورت قانونی و فقط از طریق خط فرمان اینکار رو انجام بدید باید از دستور زیر استفاده کنید.

      powershell -command "Start-Process cmd.exe -Verb runAs"

      موفق باشید

  3. Avatar photo MOSLEM.K گفت:

    سلام. لطفا میشه توضیح بدید که جطور می توان string بخصوصی را از داخل یک فایل txt به یک متغیر تخصیص داد.
    مثلا کلمه working از داخل فایل متنی test.txt با محتوای زیر قرار بگیرد در متغیر var= working

    .I love working CMD

  4. Avatar photo behnam گفت:

    سلام
    فصل 4و 2 یکی هستن

  5. Avatar photo مهدی گفت:

    عزیز سلام و عرض ادب … یک سوال داشتم ، میشه که مقدار متغیر ها رو بدون نوشتن کلمه ی set ، مقداردهی کرد ؟
    مثلا من در ابتدای برنامه بنویسم :
    set mahdi
    و توی یک خط دیگه از برنامه این رو مقداردهی کنم بدون استفاده از کلمه set ، مثلا :
    if exist myfolder %mahdi% = 10
    یا مثلا
    if not %var1% == %var2% %mahdi%=5
    یچیزی سبیه همین موارد منظورم هست

  6. Avatar photo ناشناس گفت:

    سلام علیکم
    من یه کد برای ماشین حساب نوشتم
    این کد ابتدا عدد اول و عدد دوم و عملگر رو می‌گیره
    با حلقه if عملگر رو شناسایی می‌کنه
    و دستور مورد نظر رو اجرا می‌کنه
    پیش از این که کدها توی حلقه if قرار بگیرن
    همه چیز درسته و کار می‌کنه
    اما وقتی کدها رو توی حلقه می‌ذارم
    دیگه درست کار نمی‌کنه
    یعنی من نمی‌تونم یه متغیر رو توی حلقه تعریف کنم؟
    کد:

    @Echo off
    set /P number_1= Enter number_1:
    set /P number_2= Enter number_2:
    Set /P operation= Enter operation:
    If %operation% == + (
    	set /A output_number= %number_1% + %number_2%
    	Echo %number_1% %operation% %number_2% = %output_number%
    ) Else If %operation% == - (
    	set /A output_number= %number_1% - %number_2%
    	Echo %number_1% %operation% %number_2% = %output_number%
    ) Else If %operation% == * (
    	set /A output_number= %number_1% * %number_2%
    	Echo %number_1% %operation% %number_2% = %output_number%
    ) Else If %operation% == / (
    	set /A output_number= %number_1% / %number_2%
    	Echo %number_1% %operation% %number_2% = %output_number%
    ) Else (
    	Echo You have not typed a valid operator, please run the program again.
    )
    Pause
    
    • سلام عزیز
      نحوه استفاده از دستور if به این شکل نیست، دستور برای اجرای شرطی مورد استفاده قرار میگیره و اصلا elseif نداره فقط else داره که یکبار میتونید ازش استفاده کنید نه چندبار، خیلی ساده میتوستید کد بالا رو بدون نیاز به دستور if بنویسید، برای مثال:

      @Echo off
      Title Calculator
      :main
      cls
      Set /P number_1= Enter number_1: 
      Set /P number_2= Enter number_2: 
      Set /P operation= Enter operation: 
      echo.
      
      Set /a Res=%number_1% %operation% %number_2%
      Echo %number_1% %operation% %number_2% = %Res%
      
      echo.
      echo One more time?
      Pause >nul
      Goto :main
      
    • اما اگر هم خواستید از دستور if برای بررسی وضعیت استفاده کنید باید به این صورت عمل کنید:

      if %operation% == + ( 
         some commands
      ) else (
         other commands
      )
      
  7. Avatar photo ناشناس گفت:

    سلام علیکم
    خیلی ممنون
    الان برای اینکه ببینیم کاربر حرف n رو برای اتمام کار و حرف y رو برای شروع دوباره نوشته
    باید چیکار کرد؟
    با توجه به اینکه ممکنه حروف بزرگ وارد کنه
    مشکلم فقط توی همین شناسایی هست
    بقیه رو نوشتم

    راستی جواب پیام قبلی به ایمیلم نیومد
    مشکلی پیش اومده؟

    • سلام
      میتونید از دستور if به همراه پارامتر /i برای بررسی متغیر بدون در نظر گرفتن حروف بزرگ و کوچک استفاده کنید، برای مثال:

      
      if /i %input% == Y (
      
      	echo Well done!
      )
      
  8. Avatar photo ناشناس گفت:

    ممنون
    یه سوال
    میشه توی حلقه از or یا and استفاده کرد؟
    اینجوری:

    if %var1% = 2 or %var2% = 4 (
     ::code
    )
    یا
    if %var1% = 2 and %var2% = 4 (
     ::code
    )
    

    راستی
    جایی هست که این سوییچ ها رو لیست کرده باشه؟
    من جستجو می کنم برام حلقه سوئیچ میاره

  9. Avatar photo منتظران گفت:

    سلام استاد عزیز
    خیلی ممنون بابت آموزش خوبتون.
    خیلی استفاده کردم.
    ولی بعضی از قسمت هاش یه جوری بود برای مثال:
    گفتید متغیر های محیطی اما نگفتید که چطور میشه ازشون استفاده کرد و کاربردشون چیه.
    یا اون قسمت که گفتید متغیر های Local و Global درباره متغیر Global توضیح ندادید و
    یا اون قسمت که گفتید دستور setlocal دارای چهار پارامتر است درباره پارامتر چهارم یعنی DisableDelayedExpansion توضیح ندادید.
    اگه میشه این مشکلات رو جبران کنید و اگه هم تو متن بود و من متوجه نشدم لطفا بهم بگین.
    با تشکر از سایت عالیتون

    • سلام عزیز
      ممنونم باعث خوشحالی 🙂
      منظور از متغیر های محیطی، متغیر های هستند که توسط سیستم عامل ایجاد میشن و شما میتونید از محتواشون استفاده کنید. مثل متغیر Temp یا Username
      فرق شون رو توضیح دادم متغیر های Global محدود به بحشی از فایل بج نیستند و در همه جای فایل بچ میتونید ازشون استفاده کنید.
      یک فایل بچ به صورت پیشفرض روی DisableDelayedExpansion و ویژگی ها که با EnableDelayedExpansion فعال میشه رو نداره
      خواهش میکنم موفق باشید

  10. Avatar photo 1 گفت:

    عالی بود اقای برغمدی🙏🙏🙏

  11. Avatar photo reza گفت:

    سلام مهندس.ممنون از سایت خوبت.یه سوال دارم از خدمتت.من یه فایل نوت پد دارم که داخلش چند تا شماره تلفن هستش.چجوری میشه توی بچ فایل هر بار یکی از اون شماره ها رو فراخوانی کنم؟؟؟من بچ فایلی نوشتم که به صورت خودکار اکانت جیمیل میسازه و میخوام در قسمت شماره تلفن هر بار یکی از اون شماره تلفن ها رو فراخوانی کنه و تو سایت جیمیل وارد کنه

  12. Avatar photo Jason گفت:

    ببخشید میشه کاربرد پارامتر enabledelayedexpansion رو واضح تر بگید

    • تا زمانیکه دستور set به صورت کامل اجرا نشه و به سطر بعدی در فایل بچ نره نمیشه از محتوای متغیر ایجاد شده استفاده کرد. با این روش میتونید قبل از رفتن به سطر بعدی مقدار متغیر رو بخونید. این بیشتر تو دستورات for و if و در فانکشن ها کاربدی:

      @echo off
      rem normal batch file
      set variable = sampleValue & echo %variable%
      
      ---------------------------------------------
      @echo off
      setlocal enabledelayedexpansion
      set variable = sampleValue & echo !variable!
      
  13. Avatar photo سید ارمیا گفت:

    سلام وقتتون بخیر ببخشید من دارم کدی رو می نویسم که ویندوز رو اکتیو کنه .
    ولی در اجرا فایل به مشکل می خورم.
    ممنون می شم بگیمن که مشکل چیه ؟

    title Please Wait To Craking WIN 10 ( 0 complated )
    @echo off
    color F
    cls 
    echo If you Unknow Your Windows Mode You can enter Z
    echo.
    echo ---List----
    echo  [1] Home
    echo  [2] Professional
    echo  [3] Professional N
    echo  [4] Home Single Language
    echo  [5] Home N
    echo  [6] Home Country Specific
    echo  [7] Enterprise
    echo  [8] Enterprise N
    echo  [9] Education
    echo  [N] Education N
    echo -----------
    echo.
    set type=choice /c 1234567890NZ /n /m "Choose your Windows Mode Or press 0 to EXIT: "
    set _ep=%type%
    %type%
    echo Prees Ok to Craking ...
    if %_ep%==1 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==2 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==3 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==4 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==5 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==6 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==7 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==8 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==9 slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==N slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    if %_ep%==Z systeminfo
    title Please Wait To Craking WIN 10 ( 37 complated )
    slmgr /ato
    title Please Wait To Craking WIN 10 ( 94 complated )
    net start
    title Please Wait To Craking WIN 10 ( 100 complated )
    cls
    title Home Net Activer ( for win 10 )
    echo Your Win The Craked
    echo Set free License for you 
    echo Copyright 2022 ( SAYED IRMIYA HUSSAINI )
    echo If you get a warning its because your Win is not Win 10.
    echo .................................
    pause
    
  14. Avatar photo مرادیفر گفت:

    سلام جناب برغمدی . من از زمان داس با بچ فایل کار میکردم و قعلا هم با اون برنامه نویسی میکنم . اما از سایت شما برام جالب بود . ممنون از سایت زیباتون .

  15. Avatar photo amir گفت:

    سلام روز بخير
    خسته نباشي مهندس جان يه جا واقعا گير کردم مزاحم شدم
    آيا ميشه يک متغيير با دستور مقدار داد يا اينکه خروجي يک دستور تو يه متغيير گذاشت؟
    مثل:
    set /p TedadFiles=” Forfiles /p “%Address%” /s /m *.bak /D -100 | Find /c /i “Backup” “

  16. Avatar photo r.ahmadi89 گفت:

    سلام.
    بسیار مطلب مفیدی بود و خوب توضیح دادین.
    مثال‌ها خوب مطلبو جا انداختن.
    ممنون.
    سایت قشنگی دارین.

  17. Avatar photo وحید گلستان گفت:

    سلام

    ممنون از اموزش عالتون

    توضیحات مربوط به local , global کمی گنگ می باشد.

  18. Avatar photo وحید گلستان گفت:

    استاد جان

    پرسش و پاسخ ها هم بسیار مفید هستند، ان شاالله ذخیره اخرت اتون باشه.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *