0

だから私はこれで一日中踊っていましたが、時代を超越したフレーズ「猫の皮をむく方法は複数あります」が頭に浮かび続けているので、コミュニティに参加することにしました.

シナリオ:

ソース フォルダ「C:\Updates」には、さまざまな拡張子のファイルが 100 個含まれています。すべてを「C:\Prod\」のサブフォルダーのみにコピーする必要があります。これにより、検出される可能性のある重複が上書きされます。

警告:

  1. 「C:\Prod」内のサブフォルダー名 (宛先)は非常に動的で、頻繁に変更されます。

  2. 命名規則を使用して、元のファイルをコピーするときに (元のバージョンを保持するために) コピー先のどのサブフォルダーを除外する必要があるかを判断します。説明を簡単にするために、"!stop" で始まるフォルダー名はコピー プロセスから除外する必要があるとします。(!stop* ワイルドカードが考慮される場合)

ですから、運が良ければ、PS でこれに取り組むために、私よりも優れた人々の意見を求めています。今日は Copy-Item と xcopy をいじってみたので、他のユーザーの意見を聞くのが楽しみです。

ありがとう!

-クリス

4

2 に答える 2

0

「!stop」で始まらないサブフォルダーのみを選択するには、次のようにします。

$Source = "C:\Updates\*"
$Dest =   "C:\Prod"
$Stop =   "^!stop"

$Destinations = GCI -Path $Dest |?{$_.PSIsContainer -and $_.Name -notmatch $Stop }
ForEach ($Destination in $Destinations) {
  Copy-Item -Path $Source -Destination $Destination.FullName -Force 
}

Edited Now は、Update から "!stop" で始まらない Source のサブにすべてのファイルをコピーします -whatif スイッチは、何が起こるかを示します。

Edit2スクリプトを簡素化しました。C:\Prod のサブ/サブフォルダーもコピーを受け取る場合は、パイプの直前に gci への -rec オプションを含めます。

于 2016-11-11T00:50:53.663 に答える