ファイルとフォルダーの PowerShell ループ
- 
          
            PowerShell Get-ChildItemを使用してファイルとフォルダーをループする
- 
          
            PowerShell Get-ChildItemとForEachを使用してファイルとフォルダーをループする
 
この記事では、ファイルとフォルダーをループする PowerShell スクリプトを作成する方法について説明します。 Get-ChildItem および ForEach ステートメントを使用して、さまざまな PowerShell スクリプトを作成します。 すぐに飛び込みましょう。
PowerShell Get-ChildItem を使用してファイルとフォルダーをループする
    
PowerShell Get-ChildItem コマンドレットを使用して、指定した場所にあるファイルとフォルダーの一覧を表示します。 -path 属性を使用して、目的のディレクトリへのパスを指定します。
Get-ChildItem も gci をエイリアスとして使用します。
たとえば、C:/ ドライブ内のファイルとフォルダーのリストを取得する場合は、次のコマンドを実行できます。
Get-ChildItem -Path 'C:\'
上記のコマンドは、ドライブのルートにあるファイルとフォルダーのみを表示します。 子ディレクトリ (サブフォルダー) の内容を取得するには、以下に示すように -Recurse パラメーターを追加します。
Get-ChildItem -Path 'C:\' -Recurse
PowerShell は、ドライブにあるすべてのサブフォルダーの内容を表示します。
PowerShell Get-ChildItem と ForEach を使用してファイルとフォルダーをループする
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 ファイル拡張子を持つ 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-ChildItem と ForEach ループを使用して、ファイルとフォルダーをループするスクリプトを作成できます。
ForEach ループは、Get-ChildItem コマンドレットから渡されたすべてのファイルに対して、指定されたアクションを実行します。 2つの PowerShell ユーティリティを使用するには、さまざまな方法があります。
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn