HOWTO · PowerShell

ファイルとフォルダーの PowerShell ループ

この記事では、ファイルとフォルダーをループする PowerShell スクリプトを作成する方法について説明します。 Get-ChildItem および ForEach ステートメントを使用して、さまざまな PowerShell スクリプトを作成します。

このページの内容

この記事では、ファイルとフォルダーをループする PowerShell スクリプトを作成する方法について説明します。 Get-ChildItem および ForEach ステートメントを使用して、さまざまな PowerShell スクリプトを作成します。 すぐに飛び込みましょう。

PowerShell Get-ChildItem を使用してファイルとフォルダーをループする

PowerShell Get-ChildItem コマンドレットを使用して、指定した場所にあるファイルとフォルダーの一覧を表示します。 -path 属性を使用して、目的のディレクトリへのパスを指定します。

Get-ChildItemgci をエイリアスとして使用します。

たとえば、C:/ ドライブ内のファイルとフォルダーのリストを取得する場合は、次のコマンドを実行できます。

Get-ChildItem -Path 'C:\'

上記のコマンドは、ドライブのルートにあるファイルとフォルダーのみを表示します。 子ディレクトリ (サブフォルダー) の内容を取得するには、以下に示すように -Recurse パラメーターを追加します。

Get-ChildItem -Path 'C:\' -Recurse

PowerShell は、ドライブにあるすべてのサブフォルダーの内容を表示します。

PowerShell Get-ChildItemForEach を使用してファイルとフォルダーをループする

PowerShell ForEach ループを使用して、オブジェクトのコレクション内の各オブジェクトとして機能します。 Get-ChildItem コマンドレットと ForEach ループを使用する場合の一般的な構造は次のとおりです。

Get-ChildItem Path "C:\" |

Foreach-Object {

#Some action with $_.FullName

}

2つの PowerShell ユーティリティを使用したスクリプトの例をいくつか見てみましょう。

C:\Users\pc フォルダー内のすべての .csv ファイルを削除するとします。 これについてどうすればよいでしょうか?

以下に示すように、Get-ChildItem コマンドレットと ForEach ループを使用してこのタスクを実行できます。

Get-ChildItem Path "C:\Users\pc" -Recurse -Filter *.csv
|
Foreach-Object {
Remove-Item $_.FullName -WhatIF
}

上記のスクリプトは、PowerShell Get-ChildItem コマンドレットと -Recurse パラメーターを使用して、C:\Users\pc フォルダー内のすべてのファイルを取得します。 次に、Filter パラメータを使用して、.csv ファイル拡張子のみを持つファイルをフェッチします。

結果を ForEach ループにパイプして、ファイルを削除します。 ただし、ファイルを削除したくないので、-WhatIf パラメータを追加しました。 以下は、上記のスクリプトの出力です。

CSV ファイルを削除する ForEach ループ

私たちのスクリプトは、.csv ファイル拡張子を持つ 6つのファイルを見つけました。 -WhatIf パラメーターを使用したため、ファイルはまだ削除されていません。

特定の日付より古いファイルを削除するスクリプトを作成することもできます。 これは、システムから一時ログ ファイルをクリーンアップするときに役立ちます。

以下は、pc ディレクトリにある 7 日以上経過したファイルを削除するスクリプトの例です。

Get-ChildItem C:\Users\pc\ -Recurse
|
Where-Object { $_.CreationTime -lt ($(Get-Date).AddDays(-7))} |
ForEach-Object { remove-Item $_.FullName whatif }

Recurse パラメーターを指定したこの Get-ChildItem は、pc フォルダー内のすべてのファイルをフェッチし、それらを ForEach ループに渡します。 ループは、7 日より古いすべてのファイルを削除します。

フォルダー内のファイルを削除したくないので、-WhatIf パラメーターを追加しました。

結論として、PowerShell Get-ChildItemForEach ループを使用して、ファイルとフォルダーをループするスクリプトを作成できます。

ForEach ループは、Get-ChildItem コマンドレットから渡されたすべてのファイルに対して、指定されたアクションを実行します。 2つの PowerShell ユーティリティを使用するには、さまざまな方法があります。