web-dev-qa-db-ja.com

Copy-Itemコマンドレットを正しく使用して、パイプされたファイルをコピーする方法

すべての.ZipファイルをF:\tempzipという特別なフォルダーにコピーする小さなスクリプトを作成しています。

Copy-Item cmdletで試してみましたが、どうにかできませんでした。スクリプトは、このフォルダーから「再帰的に」「.Zip」であるすべてのファイルをコピーする必要があります。

これは私が話しているスクリプトの一部です。

get-childitem F:\Work\xxx\xxx\xxx -recurse `
   | where {$_.extension -eq ".Zip"}       `
   | copy-item F:\tempzip

何を追加する必要がありますか?

13
RayofCommand

アイテムをcopy-itemにパイピングするとき、"F:\tempzip"が宛先パスであることを伝える必要があります。

| Copy-Item -Destination F:\tempzip

Get-ChildItemのパラメーター-filterを使用して、where演算子へのパイプを切り取ることができます。

Get-Childitem "C:\imscript" -recurse -filter "*.Zip" | Copy-Item -Destination "F:\tempzip"

編集:不要なforeachループの削除と説明の更新。

11
Richard

それよりもずっと簡単です。 Copy-Itemには独自の-Recurseスイッチがあります。あなたがしなければならないのは:

Copy-Item F:\Work\xxx\xxx\xxx\*.Zip F:\tempzip -Recurse
13
Adi Inbar

何らかの理由で、ここで述べたように、Copy-Itemの再帰は、私が望んでいたこと、および動作するように文書化されている方法を達成しませんでした。任意の深さのサブフォルダー階層に* .Zipまたは* .jpgファイルの束があり、それらを単一の場所(1つのフラットフォルダー、他の場所)にコピーしたい場合、Get-ChildItemを含むパイプコマンドで運が良かった。現在、検索のルートを含むフォルダーにいるとします。

Get-ChildItem -Recurse -Include *.Zip | Copy-Item -Destination C:\Someplace\Else

このコマンドはすべてのファイルをコピーし、フォルダー階層を複製しません。

4
Greg