ホーム > 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]となっているファイル)がコピーされていることが分かります。
コピー後の状態
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
コメント