批次處理陣列


陣列型別並沒有明確定義為批次處理指令碼中的型別,但可以實現。 在批次處理指令碼中實現陣列時需要注意以下幾點。

  • 陣列中的每個元素都需要用set命令來定義。
  • for迴圈將需要遍歷陣列的值。

建立一個陣列

一個陣列是通過使用下面的set命令建立的。

set a[0]=1

其中0是陣列的索引,1是分配給陣列的第一個元素的值。
另一種實現陣列的方法是定義一個值列表並遍歷值列表。 以下範例顯示了如何實現。

範例

@echo off 
set list=1 2 3 4 
(for %%a in (%list%) do ( 
   echo %%a 
))

以上命令產生以下輸出 -

1
2
3
4

存取陣列

可以使用下標語法從陣列中檢索值,並在陣列的名稱後面立即傳遞要檢索的值的索引。

範例

@echo off 
set a[0]=1 
echo %a[0]%

在這個例子中,索引從0開始,第一個元素可以使用索引存取為0,第二個元素可以使用索引存取為1,依此類推。通過下面的例子來看看如何建立,初始化和存取陣列 -

@echo off
set a[0]=1 
set a[1]=2 
set a[2]=3 
echo The first element of the array is %a[0]% 
echo The second element of the array is %a[1]% 
echo The third element of the array is %a[2]%

以上命令產生以下輸出 -

The first element of the array is 1 
The second element of the array is 2 
The third element of the array is 3

修改陣列

要將一個元素新增到陣列的末尾,可以使用set元素以及陣列元素的最後一個索引。

範例

@echo off 
set a[0]=1 
set a[1]=2 
set a[2]=3 
Rem Adding an element at the end of an array 
Set a[3]=4 
echo The last element of the array is %a[3]%

以上命令產生以下輸出 -

The last element of the array is 4

可以通過在給定索引處指定新值來修改陣列的現有元素,如以下範例所示 -

@echo off 
set a[0]=1 
set a[1]=2 
set a[2]=3 
Rem Setting the new value for the second element of the array 
Set a[1]=5 
echo The new value of the second element of the array is %a[1]%

以上命令產生以下輸出 -

The new value of the second element of the array is 5

疊代陣列

遍歷陣列是通過使用for迴圈並遍歷陣列的每個元素來實現的。以下範例顯示了一個可以實現陣列的簡單方法。

@echo off 
setlocal enabledelayedexpansion 
set topic[0]=comments 
set topic[1]=variables 
set topic[2]=Arrays 
set topic[3]=Decision making 
set topic[4]=Time and date 
set topic[5]=Operators 

for /l %%n in (0,1,5) do ( 
   echo !topic[%%n]! 
)

以下方面需要注意的事項 -

  • 陣列中的每個元素都需要使用set命令專門定義。
  • for迴圈移動範圍的/L引數用於迭代陣列。

以上命令產生以下輸出 -

Comments 
variables 
Arrays 
Decision making 
Time and date 
Operators

陣列的長度

陣列的長度是通過遍歷陣列中的值列表完成的,因為沒有直接的函式來確定陣列中元素的數量。

@echo off 
set Arr[0]=1 
set Arr[1]=2 
set Arr[2]=3 
set Arr[3]=4 
set "x=0" 
:SymLoop 

if defined Arr[%x%] ( 
   call echo %%Arr[%x%]%% 
   set /a "x+=1"
   GOTO :SymLoop 
)
echo "The length of the array is" %x%

以上命令產生以下輸出 -

The length of the array is 4

在陣列中建立結構

結構也可以在批次處理檔案中使用一點額外的編碼來實現。 以下範例顯示了如何實現這一點。

範例

@echo off 
set len=3 
set obj[0].Name=Joe 
set obj[0].ID=1 
set obj[1].Name=Mark 
set obj[1].ID=2 
set obj[2].Name=Mohan 
set obj[2].ID=3 
set i=0 
:loop 

if %i% equ %len% goto :eof 
set cur.Name= 
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name=%cur.Name% 
echo Value=%cur.ID% 
set /a i=%i%+1 
goto loop

上面的程式碼需要注意以下幾點 -

  • 使用set命令定義的每個變數具有與陣列的每個索引關聯的2個值。
  • 變數i設定為0,以便可以遍歷結構將陣列的長度為3
  • 總是檢查i的值是否等於len的值,如果不是,則迴圈遍歷程式碼。
  • 可以使用obj[%i%]表示法存取結構的每個元素。

以上命令產生以下輸出 -

Name=Joe 
Value=1 
Name=Mark 
Value=2 
Name=Mohan 
Value=3