0

このソリューションに基づいた次のサンプル コード (Powershell) を考えてみます。

$newFiles = @(Get-ChildItem -recurse -path "c:\path1");
$oldFiles = @(Get-ChildItem -recurse -path "c:\path2");
Compare-Object -ReferenceObject $newFiles -DifferenceObject $oldFiles -Property FullName,Length,LastWriteTime

どちらの側にも同じプロパティ セットを持つSideIndicatorオブジェクトが存在するかどうかを確認する必要があります。しかし、これは通常、生産目的ではほとんど役に立ちません。私が本当に必要としているのは、すべてのオブジェクトをキーにして、andFullNameで比較することです (上記の例の場合)。異なる場合は、正確に何が異なるか (または両方)、どの程度正確に異なるか (>、<、=)を伝えることができます。組み込みの方法を使用して、Powershellで可能ですか?LengthLastWriteTimeLengthLastWriteTime

4

1 に答える 1

3

Compare-Object非常に機能が軽いコマンドレットです。それはいくつかの深刻な改善に耐えることができます. Nameこれを機能させる最善の方法は、削除/追加されたファイルを別のバケットに分割し、 notFullNameを使用して同じファイルを比較することでしたSyncWindow

$removed = Compare-Object -ReferenceObject $oldFiles -DifferenceObject $newFiles -Property Name -PassThru | Where {$_.SideIndicator -eq '<='}
$added = Compare-Object -ReferenceObject $oldFiles -DifferenceObject $newFiles -Property Name -PassThru | Where {$_.SideIndicator -eq '=>'}
$removedNames = $removed | Foreach {$_.Fullname}
$same = $oldFiles | Where {$_.Fullname -notin $removedNames}
Compare-Object -ReferenceObject $same -DifferenceObject $newFiles -Property Name,Length,LastWriteTime -SyncWindow 1

これにより、次のような結果が得られました。

Name                                                 Length LastWriteTime                 SideIndicator
----                                                 ------ -------------                 -------------
AssemblyInfo.Shared.cs                                  340 8/28/2012 1:21:53 AM          =>
AssemblyInfo.Shared.cs                                  340 8/28/2012 1:21:28 AM          <=
EchoArgs.cs                                             825 8/28/2012 1:21:54 AM          =>
EchoArgs.cs                                             825 8/28/2012 1:21:30 AM          <=
AssemblyInfo.cs                                         151 8/28/2012 1:21:54 AM          =>
AssemblyInfo.cs                                         151 8/28/2012 1:21:31 AM          <=

それでも、リストの途中でファイルが同期しなくなります。図に行きます。SyncWindow パラメーターを削除しても、「正しい」結果が得られます。ファイルが散らばっていて、上下に並んでいないだけです。:-(

于 2013-01-02T22:42:20.840 に答える