【PowerShell】指定した拡張子のファイルを抽出してコピー


この記事はプロモーションを含みます。

PowerShell

ホーム > PowerShell 逆引きリファレンス

PowerShellで、指定したフォルダ配下にあるファイルのうち、指定した拡張子を含むファイルのみを抽出してコピーする方法を解説します。

フォルダ直下のファイルをコピー

フォルダ直下にあるファイルのうち、指定した条件を元にコピーする方法です。

書式

Copy-Item -Filter <抽出条件> -Path <コピー元のフォルダパス> -Destination <コピー先のフォルダパス>

サンプル

「C:\ws\From」直下のファイルのうち、拡張子が「.log」となっているファイルを「C:\ws\To」配下にコピーします。

Copy-Item -Filter *.log -Path C:\ws\From\* -Destination C:\ws\To

実行結果

サンプルの実行前後の状態です。
PowerShellのコンソールには何も出力されませんでした。

コピー前の状態
C:\ws\From
C:\ws\From\File1-1.log
C:\ws\From\File1-1.txt
C:\ws\From\File1-2.log
C:\ws\From\Dir1
C:\ws\From\Dir1\File2-1.log
C:\ws\To

赤字のファイル(拡張子が[.log]となっているファイル)がコピーされていることが分かります。

コピー後の状態
C:\ws\From
C:\ws\From\File1-1.log
C:\ws\From\File1-1.txt
C:\ws\From\File1-2.log
C:\ws\From\Dir1
C:\ws\From\Dir1\File2-1.log
C:\ws\To
C:\ws\To\File1-1.log
C:\ws\To\File1-2.log

フォルダ配下のファイルを再帰的にコピー

フォルダ配下のファイル(フォルダ)を再帰的(サブディレクトリも含めて)に、指定した条件を元にコピーする方法です。

書式

Copy-Item -Filter <抽出条件> -Path <コピー元のフォルダパス> -Recurse -Destination <コピー先のフォルダパス>

サンプル

「C:\ws\From」配下のファイルのうち、拡張子が「.log」となっているファイルを「C:\ws\To」配下にコピーします。

Copy-Item -Filter *.log -Path C:\ws\From -Recurse -Destination C:\ws\To

実行結果

サンプルの実行前後の状態です。
PowerShellのコンソールには何も出力されませんでした。

コピー前の状態
C:\ws\From
C:\ws\From\File1-1.log
C:\ws\From\File1-1.txt
C:\ws\From\File1-2.log
C:\ws\From\Dir1
C:\ws\From\Dir1\File2-1.log
C:\ws\From\Dir1\File2-1.txt
C:\ws\From\Dir1\File2-2.log
C:\ws\From\Dir1\Dir2
C:\ws\From\Dir1\Dir2\File3-1.log
C:\ws\From\Dir1\Dir2\File3-1.txt

赤字のファイル(拡張子が[.log]となっているファイル)がコピーされていることが分かります。

コピー先のフォルダ「To」が存在する場合は、今回のサンプルでコピーを行うと下記のようにコピーされます。
コピー先のフォルダ有無でパスの指定方法が変わってくるので注意が必要です。

C:\ws\To\From

コピー後の状態
C:\ws\From
C:\ws\From\File1-1.log
C:\ws\From\File1-1.txt
C:\ws\From\File1-2.log
C:\ws\From\Dir1
C:\ws\From\Dir1\File2-1.log
C:\ws\From\Dir1\File2-1.txt
C:\ws\From\Dir1\File2-2.log
C:\ws\From\Dir1\Dir2
C:\ws\From\Dir1\Dir2\File3-1.log
C:\ws\From\Dir1\Dir2\File3-1.txt
C:\ws\To
C:\ws\To\File1-1.log
C:\ws\To\File1-2.log
C:\ws\To\Dir1
C:\ws\To\Dir1\File2-1.log
C:\ws\To\Dir1\File2-2.log
C:\ws\To\Dir1\Dir2
C:\ws\To\Dir1\Dir2\File3-1.log

ファイルが既に存在するエラーが出る場合

コピー先のファイルが既に存在する場合は、下記のようなエラーが発生します。

エラーの例
Copy-Item : 指定された名前 C:\ws\To\From の項目は既に存在します。
発生場所 C:\workspace\PowerShell\powershell-copy-item-filter.ps1:11 文字:1
+ Copy-Item -Filter *.log -Path C:\ws\From -Recurse -Destination C:\ws\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceExists: (C:\ws\To\From:String) [Copy-Item], IOException
    + FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.CopyItemCommand

このようなエラーが発生する場合は、オプションに「Force」を使用して下さい。
下記が書式です。

Copy-Item -Filter <抽出条件> -Path <コピー元のフォルダパス> -Recurse -Destination <コピー先のフォルダパス> -Force

コメント

タイトルとURLをコピーしました