ایجاد آرایه در بچ اسکریپت

ایجاد آرایه در بچ اسکریپت

در زبان های برنامه نویسی آرایه (Array) به معنای مجموعه ای از عناصر است که شامل Value ها و یا Variable ها هستند و هر کدام از این عناصر توسط یک Array Index مشخص میشوند. در بچ اسکریپت هیچ دستوری برای ساخت آرایه وجود ندارد اما شما میتوانید با استفاده از دستورات SET و FOR یک محیط همانند محیط Array درست کنید. در ادامه با آموزش ایجاد آرایه در بچ اسکریپت همراه با نووا بلاگ باشید.

نحوه ایجاد آرایه در بچ اسکریپت

  • برای ساخت و مشخص نمودن عنصرهای Array باید از دستور set استفاده کنید.
  • برای تجزیه و تحلیل عناصر Array باید از دستور for استفاده کنید.

نحوه ساختن عنصرهای Array با دستور SET به شکل زیر میباشد:

SET ELEMENT[0]=1000

در دستور بالا عدد صفر، Array Index و یا کلید مشخص کننده عنصر است. و عدد 1000 ،مقدار اختصاص داده شده به این عنصر میباشد.

یکی دیگر از راههای که میتوان Array ها را در Batch Script پیاده سازی نمود ساخت یک فهرست از مقدار ها و استفاده از دستور FOR برای چرخش بین این مقدار ها میباشد. برای مثال:

@ECHO OFF
 SET ELEMENTS=1 2 3 4 5
 FOR %%G IN (%ELEMENTS%) DO (
 ECHO %%G
 ) 

دسترسی به عناصر Arrays

برای دسترسی به مقدار عنصرهای یک Array میتوان از روش Subscript Syntax استفاده نمود. در این روش شما باید مقدار Array Index را در بین علامت های Square Bracket مشخص کنید. برای مثال:

@ECHO OFF
 SET ELEMENT[0]=VALUE
 ECHO %ELEMENT[0]% 

همانطور که در اسکریپت بالا مشاهده میکنید Array Index از عدد صفر شروع شده است این بدان معناست که برای دسترسی به اولین عنصر این Array باید از عدد صفر استفاده شود همچنین برای دسترسی به دومین عنصر این Array باید از عدد 1 استفاده شود و … در ادامه به اسکریپت زیر توجه کنید:

@ECHO OFF
 SET ELEMENT[0]=FIRST ELEMENT
 SET ELEMENT[1]=SECOND ELEMENT
 ECHO THE %ELEMENT[0]% OF ARRAYS ACCESSED!
 ECHO THE %ELEMENT[1]% OF ARRAYS ACCESSED! 

نتایج خروجی اسکریپت بالا:

THE FIRST ELEMENT OF ARRAYS ACCESSED!
THE SECOND ELEMENT OF ARRAYS ACCESSED!

چرخش بین عناصر Array

همانطور که گفتم برای چرخش بین عناصر یک Array باید از دستور FOR استفاده کنید. در اسکریپت زیر نحوه انجام این فرایند را مشاهده میکنید:

@ECHO OFF
 SETLOCAL ENABLEDELAYEDEXPANSION
 SET ELEMENT[0]=Windows 2000
 SET ELEMENT[1]=Windows XP
 SET ELEMENT[2]=Windows Vista
 SET ELEMENT[3]=Windows 7
 SET ELEMENT[4]=Windows 8
 SET ELEMENT[5]=Windows 8.1
 SET ELEMENT[6]=Windows 10
 FOR /L %%G IN (0,1,6) DO (
 ECHO !ELEMENT[%%G]!
 ) 

دانستن چند نکته در مورد اسکریپت بالا میتواند کمک کننده باشد:

  • تمام عنصر ها باید با استفاده از دستور SET ساخته شوند.
  • برای چرخش بین عناصر Array نیاز است از دستور FOR به همراه پارامتر /L استفاده شود.

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

Windows 2000
 Windows XP
 Windows Vista
 Windows 7
 Windows 8
 Windows 8.1
 Windows 10 

بررسی تعداد عناصر Array

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

@ECHO OFF
 SET ELEMENT[0]=VALUE1
 SET ELEMENT[1]=VALUE2
 SET ELEMENT[2]=VALUE3
 SET ELEMENT[3]=VALUE4
 SET ELEMENT[4]=VALUE5
 :CHECK
 SET COUNT=0
 IF DEFINED ELEMENT[%COUNT%] (
 SET /A COUNT+=1
 GOTO :CHECK
 ) ELSE (
 ECHO THIS ARRAY HAVE %COUNT% ELEMENTS
 ) 

در اسکریپت بالا ابتدا در بخش Check یک Variable با نام Count و محتوای صفر ساخته شده سپس با دستور IF Defined بررسی میشود که آیا Variable مشخص شده در جلوی IF Defined وجود دارد یا خیر در صورتی که Variable وجود داشته باشد دستور SET به مقدار متغیر Count یک عدد اضافه میکند سپس با دستور GOTO به بخش Check باز میگردد و فرایند بررسی Variable ها دوباره شروع میشود اما اینبار مقدار متغیر Count از صفر به یک تغییر نموده است. این فرایند تا بررسی نمودن کلیه Element ها ادامه پیدا میکند.

درست کردن ساختار در Array ها

شما میتوانید با استفاده از دستور FOR /F و SET یک Structured Array درست کنید. برای یادگیری این موضوع به اسکریپت زیر توجه کنید:

@ECHO OFF
 SET ELEMENT[0]_DOMAIN=GOOGLE.COM
 SET ELEMENT[0]_IP=216.58.214.78
 SET ELEMENT[1]_DOMAIN=CISCO.COM
 SET ELEMENT[1]_IP=72.163.4.161
 SET ELEMENT[2]_DOMAIN=MICROSOFT.COM
 SET ELEMENT[2]_IP=52.178.167.109
 SET END=3
 SET COUNT=0
 :CHECK
 IF %COUNT% EQU %END% GOTO :EOF
 FOR /F "USEBACKQ TOKENS=1-3 DELIMS=_=" %%G IN (`SET ELEMENT[%COUNT%]`) DO (
 SET ELEMENT_%%H=%%I
 )
 ECHO THE DOMAIN NAME WAS %ELEMENT_DOMAIN%
 ECHO THE IP ADDRESS WAS %ELEMENT_IP%
 SET /A COUNT+=1
 GOTO :CHECK 

در نگاه اول شاید اسکریپت بالا کمی پیچیده به نظر آید اما با اندکی تامل روی آن میتوان به سادگی به ساختار، و عملکرد این اسکریپت پی برد. در این اسکریپت ابتدا با دستور SET شش متغیر به عنوان عناصر این Array ساخته شده که نام هر کدام از آنها شامل دو بخش میباشد و پس از آن دو متغیر دیگر ساخته شده که محتوای یکی عدد 3 میباشد و دیگری عدد صفر است. پس از متغیر ها یک بخش با نام Check ساخته شده که در آن با دستور IF مقدار متغیر Count با متغیر End مقایسه میشود و در صورت یکی بودن هر دو مقدار کار فایل Batch به پایان میرسد.

بعد از اتمام بررسی محتوای دو متغیر توسط دستور IF، با دستور FOR /F گفته شده Token های اول تا سوم نتایج دستور Set Element[%Count%] دریافت شود. و بعد از آن در جلوی دستور Do گفته شده با دستور SET یک متغیر جدید ساخته شود که بخش اول نام آن کلمه Element_ است اما بخش دوم نام آن Token دوم (%%H) نتایج دستور SET میباشد و در جلوی مساوی گفته شده محتوای این متغیر Token سوم (%%I) نتایج دستور Set است. که نتیجه آن دستورات زیر میشود.

SET ELEMENT_DOMAIN=GOOGLE.COM
SET ELEMENT_IP=216.58.214.78

پس از ساخته شدن Variable های بالا، دستور Echo این Variable ها را نمایش میدهد و پس از آن با دستور SET /A به مقدار متغیر COUNT یک واحد اضافه میشود یعنی حالا محتوای متغیر Count از عدد صفر به یک افزایش یافته و پس از آن با دستور GOTO گفته شده به بخش CHECK برو تا دوبار فرایند بررسی توسط دستور IF انجام شود.

دفعه قبل که بررسی توسط دستور IF انجام شده بود مقدار متغیر Count عدد صفر بود اما حالا مقدار آن عدد یک است ولی باز هم با متغیر END مساوی نیست چرا که مقدار متغیر END عدد 3 میباشد پس دوباره دستور FOR از نتایج دستور SET ELEMENT[%COUNT%] دو متغیر میسازد اما اینبار از دو عنصر دوم Array که Array Index آنها عدد یک است چرا که در دستور SET ELEMENT[%COUNT%] هم مقدار متغیر Count از عدد صفر به عدد یک افزایش یافته است.

SET ELEMENT_DOMAIN=CISCO.COM
SET ELEMENT_IP=72.163.4.161

پس از ساخته شدن متغیر های بالا دوباره این متغیر ها توسط دستور ECHO نمایش داده میشوند و بعد از آن دوباره به مقدار متغیر Count یک واحد دیگر اضافه میشود که مقدار آن عدد دو میشود.

فرایند بالا آنقدر تکرار میشود که مقدار متغیر Count به عدد سه برسد و با مقدار متغیر END برابر شود. سپس کار فایل Batch با دستور GOTO :EOF به پایان میرسد. همانطور که متوجه شدید کار اسکریپت بالا به آن پیچیدگی هم که به نظر میرسد نیست فقط کافیست کمی روی دستورات استفاده شده در آن فکر کنید.

مثالهای از نحوه ایجاد آرایه در بچ اسکریپت:

مثال اول: ساخت Array از خروجی دستور DIR

در اسکریپت زیر از خروجی دستور dir یک آرایه ایجاد میشود.

@ECHO OFF
 SETLOCAL ENABLEDELAYEDEXPANSION
 TITLE CREATE ARRAY
 SET COUNT=0
 FOR /F "USEBACKQ TOKENS=*" %%G IN (`DIR /B /A %~1`) DO (
 SET "ELEMENT[!COUNT!]=%%G"
 SET /A "COUNT+=1"
 )
 SET ELEMENT 

مثال دوم: ساخت Structure در Array

ساخت Structure در Array با استفاده از دستورات SET و FOR /F

@ECHO OFF
 SETLOCAL ENABLEDELAYEDEXPANSION
 TITLE CREATED STRUCTURE ARRAYS
 :ELEMENTS
 SET ELEMENT[0].NAME=WINDOWS
 SET ELEMENT[0].FNAME=MICROSOFT
 SET ELEMENT[0].PHONE=800-642-7676
 SET ELEMENT[1].NAME=UBUNTU
 SET ELEMENT[1].FNAME=LINUX
 SET ELEMENT[1].PHONE=420-763-2004
 SET I=0
 SET E=2
 :PROGRESS
 IF %I% EQU %E% GOTO :EOF
 FOR /F "USEBACKQ TOKENS=1,2,3 DELIMS=.=" %%G IN (`SET ELEMENT[%I%]`) DO (
 SET ELEMENT.%%H=%%I
 )
 SET /A I+=1
 ECHO FIRST NAME: %ELEMENT.NAME% FAMILY NAME: %ELEMENT.FNAME% PHONE: %ELEMENT.PHONE%
 GOTO :PROGRESS 

دیدگاه‌ خود را بنویسید

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