1. ホーム
  2. powershell

PowerShellのCopy-Itemで除外リストが機能しないようです。

2023-09-25 09:49:06

質問

以下のPowerShellスクリプトのスニペットがあります。

$source = 'd:\t1\*'
$dest = 'd:\t2'
$exclude = @('*.pdb','*.config')
Copy-Item $source $dest -Recurse -Force -Exclude $exclude

これは t1 から t2 へすべてのファイルとフォルダをコピーするために動作しますが、"root"/"first-level" フォルダ内の除外リストのみを除外し、サブフォルダは除外しません。

どうすれば、すべてのフォルダーで除外リストを除外できるようになりますか?

どのように解決するのですか?

Get-ChildItemを使用して、Copy-Itemコマンドをパイプで接続するのが一番良い方法だと思います。

私はこれがうまくいくことを発見しました。

$source = 'd:\t1'
$dest = 'd:\t2'
$exclude = @('*.pdb','*.config')
Get-ChildItem $source -Recurse -Exclude $exclude | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($source.length)}

基本的に、ここで起こっていることは、有効なファイルを一つずつ調べて、新しいパスにコピーしていることです。最後の'Join-Path'ステートメントは、ファイルをコピーするときにディレクトリも保持するようにするためです。この部分は、コピー先のディレクトリを受け取り、ソースパスの後のディレクトリと結合します。

私はこのアイデアを ここで からアイデアを得て、この例で動作するように少し修正しました。

うまくいくといいんだけどなー。