VBScript の For Each...Next ステートメントの変換

Windows PowerShell

定義: 配列またはコレクション内の各要素に対して、一連のステートメントを繰り返して実行します。

For Each...Next

For Each ループは、コレクションまたは配列内の全要素を、自動的に処理するためのものです。Windows PowerShell でコレクション内の全要素を繰り返し処理するには、ForEach-Object コレクション (一般的な別名は foreach) を使用します。Windows PowerShell で For Each ループを設定するには、foreach を呼び出し、後ろに次の 2 つのパラメータを続けます。

  • 繰り返し処理の対象になるコレクション。この値は、かっこで囲む必要があります。

  • そのコレクション内の各要素に対して実行するアクション。この値は、中かっこ {} で囲む必要があります。

たとえば、次のコマンドでは、Get-ChildItem コマンドレットを使用して、C:\Scripts フォルダ内にある全ファイルのコレクションを返す For Each ループが設定されます。構文では、($i in get-childitem c:\scripts) が使用されます。これは明らかに、いつものコードとは違います。VBScript では、次のようなコードから For Each ループを "開始" します。

For Each i in colItems

一方、Windows PowerShell では、foreach を呼び出してから、次のようなコードを使用して開始します。

($i in $colItems)

繰り返しの条件が指定できたら、次のように、実行するアクションを記述します。

{$i.extension}

ここでは、 "コレクション内の各要素 ($i) に対して、Extension プロパティの値をエコーバックする" というアクションを指定しています。

全体のコマンドは、次のとおりです。

foreach ($i in get-childitem c:\scripts) {$i.extension}

C:\Scripts フォルダ内で見つかったファイルに応じて、次のような結果が得られます。

.gif
.xls
.xls
.txt
.txt
.xls
.ps1
.ps1
.zip
.vbs
.txt
.ppt

「VBScript から Windows PowerShell へ」ホーム ページに戻る