PowerShellでは、同じ処理を何度も繰り返したいときに「ループ処理」を使用します。
例えば、
- 複数のファイルを1つずつ処理する
- 配列のデータを順番に処理する
- 同じ処理を10回繰り返す
- 条件を満たすまで処理を続ける
といった処理を自動化できます。
PowerShellの代表的なループ処理には、foreach、for、while、do while、do untilがあります。それぞれ使い方が異なるため、「どれを使えばいいの?」と迷う方も多いでしょう。
この記事では、PowerShellのループ・繰り返し処理の使い方を、初心者向けにサンプルコード付きでわかりやすく解説します。
PowerShellのループ処理はどれを使えばいい?
PowerShellには複数のループ処理があります。
最初に、それぞれの違いを簡単に確認しておきましょう。
| やりたいこと | 使うループ |
|---|---|
| 配列を順番に処理したい | foreach |
| 指定した回数だけ繰り返したい | for |
| 条件を満たしている間繰り返したい | while |
| 最低1回実行してから条件判定したい | do while |
| 条件を満たすまで繰り返したい | do until |
例えば、ファイル一覧を1件ずつ処理する場合はforeach、同じ処理を10回繰り返す場合はforが分かりやすいでしょう。
初心者の方は、まずforeach・for・whileの3つを覚えておけば、多くの繰り返し処理に対応できます。
foreachで配列を繰り返し処理する
foreachは、配列などに格納されている複数のデータを1つずつ順番に処理するときに使用します。
基本構文です。
foreach ($変数 in $配列) {
実行する処理
}
$names = "田中", "鈴木", "佐藤"
foreach ($name in $names) {
Write-Output $name
}
田中
鈴木
佐藤
$nameへ入り、Write-Outputが実行されます。foreachでファイルを1件ずつ処理する
PowerShellではファイル操作を自動化することが多いため、foreachは特によく使用します。
例えば、フォルダ内のファイル名を順番に表示する場合は次のように記述します。
$files = Get-ChildItem "C:\work"
foreach ($file in $files) {
Write-Output $file.Name
}
forで指定回数だけ繰り返す
「同じ処理を10回実行したい」など、繰り返す回数が決まっている場合はforが便利です。
forの基本構文です。
for (初期値; 条件; 増減処理) {
実行する処理
}
for ($i = 1; $i -le 5; $i++) {
Write-Output $i
}
1
2
3
4
5
$i = 1
→ 1から開始
$i -le 5
→ 5以下の間繰り返す
$i++
→ 1ずつ増やす
という意味になります。
特にPowerShell初心者の場合、-leが分かりにくいかもしれません。-leは「以下」という意味です。
したがって、
$i -le 5
whileで条件を満たしている間繰り返す
whileは、指定した条件がTrueの間、処理を繰り返します。
基本構文です。
while (条件) {
実行する処理
}
$i = 1
while ($i -le 5) {
Write-Output $i
$i++
}
1
2
3
4
5
例えば「ファイルが作成されるまで待つ」「特定の状態になるまで処理する」といった用途ではwhileが向いています。
do whileで最低1回は処理を実行する
do whileはwhileと似ていますが、条件を確認するタイミングが異なります。
基本構文です。
do {
実行する処理
} while (条件)
$i = 1
do {
Write-Output $i
$i++
} while ($i -le 5)
do whileでは、先に処理を実行してから条件を判定します。そのため、最初から条件を満たしていなくても処理が最低1回実行されるのが特徴です。
do untilで条件を満たすまで繰り返す
do untilは、指定した条件がTrueになるまで処理を繰り返します。
do {
実行する処理
} until (条件)
$i = 1
do {
Write-Output $i
$i++
} until ($i -gt 5)
1
2
3
4
5
whileは「条件を満たしている間」、untilは「条件を満たすまで」という違いがあります。
breakでループ処理を途中終了する
ループの途中で処理を終了したい場合はbreakを使用します。
例えば1~10まで繰り返し、5になったら終了します。
for ($i = 1; $i -le 10; $i++) {
if ($i -eq 5) {
break
}
Write-Output $i
}
1
2
3
4
$iが5になるとbreakが実行され、forループ自体が終了します。
エラーが発生した場合や、目的のデータが見つかった場合などに便利です。
continueで特定の処理だけスキップする
continueはループそのものを終了するのではなく、現在の回だけ処理をスキップして次へ進むときに使用します。
例えば3だけ表示しない場合です。
for ($i = 1; $i -le 5; $i++) {
if ($i -eq 3) {
continue
}
Write-Output $i
}
1
2
4
5
breakとcontinueは混同しやすいので、
| コマンド | 動作 |
|---|---|
break |
ループ自体を終了 |
continue |
今回だけ飛ばして次のループへ |
と覚えておくと分かりやすいでしょう。
実務例:複数のファイルをループでコピーする
例えば、C:\workフォルダにある.txtファイルを、C:\backupへコピーしてみます。
$files = Get-ChildItem "C:\work" -Filter "*.txt"
foreach ($file in $files) {
Copy-Item $file.FullName "C:\backup"
Write-Output "$($file.Name) をコピーしました"
}
PowerShellでは、「ファイル一覧を取得 → foreachで1件ずつ処理」という書き方をよく使用します。
例えば、
- 複数ファイルをコピーする
- 古いファイルを削除する
- ファイル名を変更する
- CSVを1件ずつ処理する
といった作業にも応用できます。
foreach・for・whileの違い
どのループ処理を使えばよいか迷った場合は、次のように考えると分かりやすいです。
| ループ | 向いている処理 | 例 |
|---|---|---|
| foreach | データを1件ずつ処理 | ファイル一覧、配列 |
| for | 回数が決まっている | 10回実行 |
| while | 条件によって繰り返す | 条件成立まで待機 |
| do while | 最低1回実行 | 実行後に継続判定 |
| do until | 条件成立まで実行 | 完了するまで繰り返す |
通常のPowerShellスクリプトでは、まずforeachを使う場面が多いでしょう。
回数が決まっているならfor、条件によって繰り返すならwhileというように使い分けます。
まとめ
PowerShellでは、同じ処理を繰り返すために複数のループ構文が用意されています。
特によく使うのは、次の3つです。
foreach:配列やファイルを1件ずつ処理するfor:指定した回数だけ繰り返すwhile:条件を満たしている間繰り返す
PowerShellでファイル操作やデータ処理を自動化する場合は、foreachを使う場面が多くあります。
まずはforeachの基本的な使い方を覚えてから、必要に応じてforやwhileを使うと分かりやすいでしょう。
また、ループを途中で終了する場合はbreak、現在の処理だけをスキップする場合はcontinueを使用します。
ループ処理を使えるようになると、PowerShellで複数のファイルやデータをまとめて処理できるようになり、日常業務の自動化にも活用できます。