2017-01-12 1 views
1

Ich habe zwei Verzeichnisstrukturen mit Unterordnern und Dateien. Ich möchte alle Dateien löschen, die Duplikate im zweiten Verzeichnis sind. Und entfernen Sie alle leeren Ordner im zweiten Verzeichnis. Ich denke, ich habe das Piping-Setup richtig eingerichtet, ich bin mir nicht sicher, wie ich die Dateien entfernen soll und wenn der Ordner leer ist, den Ordner. Das Problem scheint zu sein, dass ich die Ordnerstruktur der Datei, die ein Duplikat im Befehl remove war, nicht feststellen kann.Wie zwei Verzeichnisse zu vergleichen und dann alle doppelten Dateien im zweiten Verzeichnis zu löschen

$Folder1 = Get-ChildItem -Path C:\Temp\Folder1 -Recurse 
$Folder2 = Get-ChildItem -Path C:\Temp\Folder2 -Recurse 

Compare-Object -ReferenceObject $Folder1 -DifferenceObject $Folder2 -IncludeEqual | 
    Where-Object {$_.SideIndicator -eq "=="} | 
    ForEach-Object { 
     Remove-Item "$($_.FullName)" 
    } 
+2

Warum nicht 'robocopy' verwenden? –

Antwort

1

Sie sind fast da, aber das Objekt, das Sie verwenden möchten, in der InputObject Eigenschaft der Ausgabe, die Sie von Compare-Object erhalten verschachtelt. Diese

Wechsel:

Remove-Item "$($_.FullName)" 

in this:

Remove-Item $_.InputObject.FullName 

Beachten Sie, dass die Duplikate aus dem Referenzobjekt Argument entfernt wird (d.h. $Folder1). Wenn Sie wollen, von $Folder2 entfernt werden müssen, um die Argumente wechseln:

Compare-Object -ReferenceObject $Folder2 -DifferenceObject $Folder1 -IncludeEqual | 
    Where-Object ... 

Beachten Sie auch, dass dieser Ansatz nur Dateinamen vergleicht, sonst nichts. Wenn Sie überprüfen müssen, ob die Dateien tatsächlich identisch sind, ist es wahrscheinlich besser, die Dateiliste mit robocopy zu erstellen, als @Bill_Stewart vorgeschlagen.

$folder1 = 'C:\Temp\Folder1' 
$folder2 = 'C:\Temp\Folder2' 

& robocopy.exe "$folder2" "$folder1" /s /l /is /xn /xo /xx /xl /njh /njs /ns /nc /ndl /np | 
    ForEach-Object { $_.Trim() } | 
    Remove-Item 

Wieder müssen Sie den Ordner verwenden, von dem Sie Dateien als Referenz für den Vergleich löschen möchten.

+0

Danke Ansgar. Das war genau das, was ich gesucht habe! –

Verwandte Themen