HOWTO · PowerShell

PowerShell でフォルダーを除外してアイテムをコピーする

このチュートリアルでは、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 フォルダー:

{CODE_BLOCK_8}
PowerShell コマンド: Copy-Item を使用してフォルダーを除外し、ソースファイルを指定する。

出力:

PowerShell でアイテムをコピーする除外フォルダ - 出力

上記のコマンドは、与えられた 1つのフォルダーのみを除外します。複数のフォルダーを除外する場合は、単に複数のフォルダー名を -Exclude() に入れることで実現できます。

複数のフォルダーを除外するためのコマンドを確認してください:

Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder', 'SubFolder2')).FullName -Destination "destination\" -Recurse -Force

出力を確認してください:

powershell copy-item 除外フォルダー - 出力

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 パラメーターの慎重なオーケストレーションを通じて達成され、実際のフォルダーを除外したままファイル構造の整合性を維持します。

出力:

powershell copy-item 除外フォルダー - 出力

結論

結論として、本記事で提示された技術 — Get-Item と -Exclude の使用、Where-Object と PSIsContainer の使用 — は、PowerShell のコピー操作中にフォルダーを除外するための強力で柔軟な方法を提供します。これらの方法を理解し適用することで、ユーザーは PowerShell におけるファイル管理と自動化能力を大幅に向上させることができます。

Get-Item と -Exclude アプローチは特定のフォルダーを除外するのに直感的で非常に効果的であり、Where-Object と PSIsContainer メソッドは、除外基準がより複雑または動的なシナリオで特に便利な、より微妙な制御を提供します。両方の方法は、ファイルとディレクトリを扱う PowerShell の多才さと力を示しており、システム管理者、開発者、IT 専門家にとって非常に貴重なツールとなっています。

この知識を持つことで、ユーザーはさまざまなファイルコピー作業に自信を持って取り組むことができ、Windows 環境におけるファイル管理操作の効率的かつ正確な制御を確保することができます。