2017-10-11 3 views
1

ich versuche, dieses Skript 2 OrdnerSync-Ordner Mit Powershell

$Folder1Path = 'C:\test1' 
$Folder2Path = 'C:\test2' 
$folder1Files = Get-ChildItem -Recurse -path $Folder1Path 
$folder2Files = Get-ChildItem -Recurse -path $Folder2Path 
$file_Diffs = Compare-Object -ReferenceObject $folder1Files -DifferenceObject $folder2Files 
$file_Diffs | foreach { 
$copyParams = @{'Path' = $_.InputObject.FullName} 
if($_.SideIndicator -eq '<=') 
{$copyParams.Destination = $Folder2Path} 
copy-Item @copyParams -force 
} 

Aber ich habe zu synchronisieren, um ein Problem, wenn das Skript die Datei unter test2 kopieren Sie es nicht den richtigen Pfad nicht respektiert:

in Ordner test1 ich habe: test1 \ test3 \ test4.txt und test1 \ test5.txt in Ordner test2 ich habe: test2 \ test5.txt

, wenn ich mein Skript ausführen i in Ordner test2 finden test2 \ test5.txt test2 \ test4.txt test2 \ test3

+2

Sie sollten besser nutzen Robocopy hier –

+0

, wie ich Robocopy verwenden kann ?? –

+1

Wenn Sie möchten, dass $ folder2 eine exakte Kopie von $ folder1 ist, tun Sie dies 'robocopy.exe $ folder1 $ folder2/MIR' –

Antwort

1

Sie Ihr Ziel für Copy-Item immer 'C:\test1' Einstellung. Dadurch wird eine tiefere Ordnerstruktur der Quelldatei ignoriert. Wenn Sie die Ordnerstruktur der Quelle halten möchten, müssen Sie die Eigenschaft Fullname der Datei entsprechend anzupassen:

$Folder1Path = 'C:\test1' 
$Folder2Path = 'C:\test2' 
$folder1Files = Get-ChildItem -Recurse -path $Folder1Path 
$folder2Files = Get-ChildItem -Recurse -path $Folder2Path 
$file_Diffs = Compare-Object -ReferenceObject $folder1Files -DifferenceObject $folder2Files 
$file_Diffs | 
    foreach { 
    $copyParams = @{'Path' = $_.InputObject.FullName} 
    if($_.SideIndicator -eq '<=') 
    { 
     $copyParams.Destination = $_.InputObject.FullName -replace [regex]::Escape($Folder1Path),$Folder2Path 
    } 
    copy-Item @copyParams -force 
}