2016-04-26 11 views
1

So habe ich xcopy super hilfreich gefunden, um ganze Ordnerstrukturen zu kopieren. Aber ich muss auch den Inhalt bestimmter Ordner in die neuen Verzeichnisse kopieren.Kopieren Ordnerstruktur und Inhalt von bestimmten Ordnern

Zum Beispiel:

1. C:\OriginalDir 
- \This 
    * \Test 
- \That 
    * \Test 
- \Other 

ich verwenden kann: xcopy C:\OriginalDir C:\TempDir /e /t die gesamte Struktur der C:\OriginalDir kopieren. Ich muss aber auch den Inhalt der beiden Ordner \Test in das neue Verzeichnis kopieren. Ich bin ziemlich neu bei xcopy und habe Robocopy untersucht. Gibt es eine Möglichkeit, dies zu tun? Ich versuche, dies in Powershell zu erreichen, und dachte über das Durchlaufen der Ordnerstruktur nach, aber das speichert die übergeordnete Ordnerstruktur immer noch nicht, wenn ich schließlich den Testordner erreiche.

Danke.

Antwort

1

Danke an Steve, dass er mich dazu gebracht hat, mich richtig darüber nachzudenken. Ich habe es manuell erstellt, ohne RoboCopy oder Xcopy zu benutzen, da ich sie nicht so arbeiten konnte, wie ich es wollte.

$target = "C:\\TestTemp" 
foreach($item in (Get-ChildItem "C:\\OriginalDir\\This" -Recurse)){ 

    if ($item.PSIsContainer -and ($item.Name -eq "obj" -or $item.Name -eq "bin")){ 
     $tempPath = $target 
     $path = $item.FullName 
     $trimmed = $path.TrimStart("C:\\OriginalDir") 
     $pieces = $trimmed.Split("\\"); 

     foreach($piece in $pieces){ 

      $tempPath = "$tempPath\$piece" 
      New-Item -ItemType Directory -Force -Path "$tempPath" 
      if($piece -eq "Test" -or $piece -eq "Temp"){ 
      Copy-Item -path $path\** -Destination $tempPath -Recurse -force 
      } 
     } 
    } 
} 
2

Haben Sie versucht, Robocopy - zum Beispiel:

$source = "C:\Your\Source\Directory" 
$dest = "C:\Your\Destination\Directory" 
robocopy $source $dest /e 

Die 'e' Schalter Verzeichnisse und deren Inhalt (einschließlich leerer Unterverzeichnisse) kopieren.

Wenn Sie das \ Other-Verzeichnis (es ist nicht ganz klar, aus Ihrer Frage) ausschließen möchten, können Sie wie folgt vorgehen:

robocopy $source $dest /e /xf * 

(dies ist nur die Verzeichnisstruktur Kopien ohne Dateien kopiert)

robocopy $source $dest /XD C:\Other /e 

(kopiert Dateien, schließt aber die genannten Verzeichnisse)

Sie weitere Informationen finden Sie hier:

https://technet.microsoft.com/en-GB/library/cc733145.aspx

Edit:

Um nur kopieren Verzeichnisse mit 'Test' beginnen, könnten Sie wie folgt vorgehen:

$exclude = gci C:\OriginalDir -ad | ?{ $_.Name -notlike 'Test*' 
    robocopy $source $dest /XD $exclude /e 

Wenn Ihre Ordnerstruktur mehr als eine Ebene deept ist, Du könntest den -recurse-Schalter auf Get-Childitem verwenden.

+0

Nehmen wir zum Beispiel an, ich habe 15 Ordner. Ich muss alle Verzeichnisse mit der Bezeichnung "test" und deren Inhalt kopieren. Ich muss in der Lage sein, nur diese spezifischen Inhalte mit der korrekten Verzeichnisstruktur an den neuen Speicherort zu kopieren, ohne dass der andere Inhalt außerhalb von ihnen ist. Die Exclude-Option ist nett, aber nicht das, was ich brauche, da ich eine Menge Verzeichnisse ausschließen müsste und die Verzeichnisse sich im Laufe der Zeit ändern würden, so dass ich sie nicht einfach nur hart codieren kann. – ace

+0

Ich habe meine Antwort aktualisiert, um nur die Verzeichnisse mit der Bezeichnung "Test" einzuschließen. – Steve

Verwandte Themen