Batch-script-arrays

提供:Dev Guides
移動先:案内検索

バッチスクリプト-配列

配列は、バッチスクリプトで型として特に定義されていませんが、実装できます。 配列がバッチスクリプトで実装される場合、次のことに注意する必要があります。

  • 配列の各要素は、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を使用して2番目の要素にアクセスできるということです。 次の例をチェックして、配列を作成、初期化、アクセスします-

@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コマンドを使用して明確に定義する必要があります。
  • 範囲を移動するための/Lパラメーターを使用した「for」ループは、配列を反復処理するために使用されます。

出力

上記のコマンドは、次の出力を生成します。

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