0

ある場所から別の場所にファイルをコピーしたいのですが、ファイルはソースと同じフォルダーにある必要があります。次のスクリプトを使用すると、ファイルはコピーされますが、ソース フォルダー内のフォルダーはコピーされません。助言がありますか?

$a=Get-ChildItem C:\temp\_pdf_list -recurse | Where-Object {$_.name -like "*pdf" -and $_.name -notlike "*prth*"}

$a

foreach($x in $a) {copy-item  -path $x.FullName "c:\temp\_pdfs_ck" -whatif} 

目的のパスでは、必要な方法で 1001 という名前のサブフォルダーにファイルが配置されていないことに注意してください。

出力:

What if: Performing operation "Copy File" on Target "Item: C:\temp\_pdf_list\1001\10010001.pdf Destination: C:\temp\_pdfs_ck\10010001.pdf".
4

2 に答える 2

0

のようなツールを使用するのが理想的ですが、包括的 (ソース フォルダーと宛先フォルダーの後にパラメーターを追加) と排他的 ( ) ファイル名の一致を同時にrobocopy試したことはありません。/xf pattern

PowerShell でこれを行うには、完全な出力パスを作成する必要があります。宛先フォルダーのみが提供されているcopy-item場合は、ソース ファイル名が提供されますが、相対パスは提供されません。

したがって、次のようなものです:

$dest = $x.FullName.Replace('C:\temp\_pdf_list', 'c:\temp\_pdfs_ck')
copy-item -path $x.FullName -Destination $dest

ノート:

  1. -replace演算子は正規表現と通常のファイル名文字 (\正規表現にとって重要な文字など)を使用するため、使用していません。

  2. これをすべて単一のパイプラインで実行してみませんか。

    Get-ChildItem … | Where-Object … | Foreach-Object { $dest = …; Copy-Item … }
    

    これにより、次のステートメントでのみ使用している中間コレクション用に、潜在的に大きな配列を作成することを回避できますか?

于 2013-10-14T16:19:25.650 に答える