PowerShell でフォルダーを除外してアイテムをコピーする
-
Get-Item
関数と-Exclude
パラメーターを使用した PowerShell コピー操作でのフォルダーの除外 -
Where-Object
とPSIsContainer
を使用した PowerShell コピー操作でのフォルダーの除外 - 結論

ファイル管理と自動化の領域において、特定のフォルダーを除外しながらファイルをコピーする作業は一般的でありながら微妙な課題です。本記事では、この作業を達成するための 2つの効果的な方法に焦点を当てます: Get-Item
関数を -Exclude
パラメーターと共に使用する方法と、Where-Object
と PSIsContainer
プロパティを活用する方法です。
これらの方法は、同じ目的を持ちながらも、異なる角度から問題にアプローチし、独自の利点を提供します。
私たちの目標は、これらの方法、その応用、および使用のニュアンスについて包括的な理解を提供することです。詳細な説明、構文の分解、実践的な例を通じて、初心者と経験者の両方の PowerShell ユーザーがファイルコピー作業を効率的に管理するためのスキルを身につけ、特定のワークフローの要件に合ったアプローチをカスタマイズできるようにすることを目指します。
Get-Item
関数と -Exclude
パラメーターを使用した PowerShell コピー操作でのフォルダーの除外
PowerShell でフォルダーを除外しながらファイルをコピーするために Copy-Item
コマンドを使用できます。フォルダーを除外しながら Copy-Item
を使用する方法は 2つあり、1つは単一のフォルダーを除外し、もう 1つは複数のフォルダーを除外する方法です。
この操作の構文は、Copy-Item
を Get-Item -Exclude
と組み合わせたものです:
Copy-Item -Path (Get-Item -Path "sourcePath\*" -Exclude ('folderToExclude')).FullName -Destination "destinationPath" -Recurse -Force
パラメーター:
Copy-Item
: このコマンドレットは、ファイルとディレクトリを新しい場所にコピーします。-Path
: コピーするアイテムのパスを指定します。この場合、Get-Item
によって提供されます。Get-Item
: 指定された場所からアイテムを取得します。-Exclude
:Get-Item
内のこのパラメーターは、除外するフォルダーやファイルの名前を特にフィルタリングします。('folderToExclude')
: 除外したいフォルダー名です。.FullName
: アイテムのフルパスを取得します。-Destination
: アイテムをコピーするパスです。-Recurse
: サブディレクトリの内容を含めます。-Force
: ユーザーの確認を求めずにコマンドを実行します。
コード例:
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder')).FullName -Destination "destination\" -Recurse -Force
スクリプトでは、まずソースディレクトリ(C:\origin\
)をターゲットとし、Get-Item
を使用してその中に含まれるすべてのアイテムを取得します。ここでのアスタリスク(*
)記号はワイルドカードとして機能し、ディレクトリ内のすべてのアイテムを表します。
次に、-Exclude
パラメーターを利用して、特定のサブフォルダー(具体的には SubFolder
という名前のフォルダー)を除外する意図を明確にします。この文脈において .FullName
プロパティの利用は重要です。なぜなら、私たちが扱っている各アイテムの完全なパスを取得するからです。
このリストを作成した後、指定されたフォルダーを明示的に省いて Copy-Item
に渡します。ターゲットロケーションとしてディスティネーションディレクトリ(C:\destination
)を定義します。除外を選んだフォルダーを除くサブディレクトリすべてを含めるために、-Recurse
パラメーターを組み込みます。
さらにスムーズなプロセスを確保し、潜在的な中断を避けるために -Force
パラメーターが働きかけます。これにより、特にディスティネーションディレクトリに存在するファイルの上書きに関連するシステムのプロンプトを抑制し、操作を一時停止させることを防ぎます。
origin
フォルダー:
出力:
上記のコマンドは、与えられた 1つのフォルダーのみを除外します。複数のフォルダーを除外する場合は、単に複数のフォルダー名を -Exclude()
に入れることで実現できます。
複数のフォルダーを除外するためのコマンドを確認してください:
Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder', 'SubFolder2')).FullName -Destination "destination\" -Recurse -Force
出力を確認してください:
Where-Object
と PSIsContainer
を使用した PowerShell コピー操作でのフォルダーの除外
PowerShell はファイルとフォルダーの操作に関する広範なコマンドレットセットを提供しており、Copy-Item
はコピー操作の重要な役割を担っています。しかし、そのネイティブ機能はフォルダーの除外を直接サポートしていません。
これを実現するために、Get-ChildItem
、Where-Object
、および PSIsContainer
プロパティの組み合わせを使用します。この方法は、ファイルを保持しながらディレクトリを除外する必要があるコピー操作に特に便利です。
スクリプトの構造は次の通りです:
Get-ChildItem -Path "sourcePath\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destinationPath" -Recurse -Container
パラメーター:
Get-ChildItem -Path "sourcePath\" -Recurse
: 指定されたパスからサブディレクトリを含むすべてのアイテム(ファイルとフォルダー)を取得します。Where-Object { $_.PSIsContainer -notmatch 'True' }
: すべてのディレクトリを除外します。PSIsContainer
はディレクトリに対してTrue
で、ファイルに対してはFalse
であるブーリアンプロパティです。Copy-Item -Destination "destinationPath" -Recurse -Container
: 残りのアイテム(ファイル)をディスティネーションにコピーします。-Recurse
はサブディレクトリのトラバースを確保し、-Container
がディレクトリ構造を保持します。
コード例:
Get-ChildItem -Path "origin\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destination\" -Recurse -Container
スクリプトでは、ソースディレクトリ(origin\
)からすべてのアイテムを収集することから始めます。これを行うために、Get-ChildItem
コマンドレットを使用します。
本当の魔法は、Where-Object
コマンドレットで起こります。ここで私は特にディレクトリを除外するためのフィルターを導入します。この除外は、$_ .PSIsContainer -notmatch 'True'
条件に基づいています。
この特定のコードは重要で、収集されたアイテムを効果的にふるい分けて、ファイルのみ(ディレクトリではない)をパイプラインに渡します。
次に、これらのフィルタリングされたファイルを Copy-Item
コマンドレットに渡します。ここでのコマンドは、これらのファイルを指定されたディスティネーション(destination\
)にコピーすることです。
この操作の重要な側面は、フォルダーそのものを除外しながらも、ディスティネーションで元のディレクトリ構造を保持する方法です。このバランスは Copy-Item
内の -Recurse
と -Container
パラメーターの慎重なオーケストレーションを通じて達成され、実際のフォルダーを除外したままファイル構造の整合性を維持します。
出力:
結論
結論として、本記事で提示された技術 — Get-Item
と -Exclude
の使用、Where-Object
と PSIsContainer
の使用 — は、PowerShell のコピー操作中にフォルダーを除外するための強力で柔軟な方法を提供します。これらの方法を理解し適用することで、ユーザーは PowerShell におけるファイル管理と自動化能力を大幅に向上させることができます。
Get-Item
と -Exclude
アプローチは特定のフォルダーを除外するのに直感的で非常に効果的であり、Where-Object
と PSIsContainer
メソッドは、除外基準がより複雑または動的なシナリオで特に便利な、より微妙な制御を提供します。両方の方法は、ファイルとディレクトリを扱う PowerShell の多才さと力を示しており、システム管理者、開発者、IT 専門家にとって非常に貴重なツールとなっています。
この知識を持つことで、ユーザーはさまざまなファイルコピー作業に自信を持って取り組むことができ、Windows 環境におけるファイル管理操作の効率的かつ正確な制御を確保することができます。
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook