2016-07-13 6 views
2

Ich möchte einen Ordner mit Unterverzeichnissen, Dateien und Dateien in Unterverzeichnissen kopieren, dabei die Struktur beibehalten und sie an einem neuen Speicherort erstellen, der vorher nicht existierte. Das ist mein Powershell-CodeKopieren der Ordnerstruktur an einen Speicherort, der nicht existiert

Copy-Item c:\development\powershell\folderone\* c:\development\powershell\foldertwo -recurse -Container 
Copy-Item c:\development\powershell\folderone\* c:\development\powershell\folderthree -recurse -Container 

foldertwo existiert und leer ist, folderthree nicht existiert.

Wenn ich das Skript ausführen, wird die Struktur korrekt in foldertwo erstellt, wird jedoch folderthree erstellt, enthält aber nur alle Dateien aus dem gesamten Unterbau, alle an der Wurzel folderthree Ebene. Es hat die Unterordner innerhalb folderone nicht neu erstellt, legen Sie einfach alle Dateien auf der Stammebene von folderthree.

Was habe ich falsch gemacht?

+1

Wenn ich das Problem richtig verstehe, möchten Sie vielleicht zuerst 'Test-Path' verwenden und dann, wenn es als 'false' zurückkehrt, das Verzeichnis erstellen, ala [this] (http: // stackoverflow. com/a/16911470/2486496) antworten Sie hier. – gravity

+2

Danke, das hat den Trick – NZJames

+0

Ich kann dieses Verhalten nicht reproduzieren, wenn ich 'copy-item c: \ test c: \ test2 -recurse -container' benutze (ohne' * ') dann funktioniert es und legt Dateien hinein Unterordner. Wenn ich es mit einem '*' in der Quelle versuche, wie Sie es haben, bekomme ich Fehler und es kopiert nicht alles - aber es dumpt keine Dinge im root. Hast du es ohne das Sternchen in der Quelle versucht? – TessellatingHeckler

Antwort

2

Hier ist ein sehr einfaches, aber voll funktionsfähig und getestet Beispiel darüber auf Ihrer Bestätigung Aufbau ich das Problem verstanden at-Hand:

$folderlist = ("foldertwo", "folderthree") 
foreach ($folder in $folderlist) 
{ 
    if (!(Test-Path "C:\Development\PowerShell\$folder")) 
    { 
     mkdir ("C:\Development\PowerShell\$folder") | Out-Null 
    } 
    Copy-Item c:\development\powershell\folderone\* c:\development\powershell\$folder -recurse -Container 
} 
+0

Danke für die Hilfe hier ... Ich habe eine Datei außerhalb meiner Ordnernamen, also wie kann ich es einmal kopieren? – Underdog

+0

Dies wäre eine gute Gelegenheit, um eine neue Frage selbst zu stellen, und verdienen Sie richtig, @Underdog. Lesen Sie [ask] und verlinken Sie zu diesen Fragen und Antworten, um Ihre Frage zu erweitern. :-) – gravity

2

Von dem, was ich verstehe, ist die Frage, die Ordnerstruktur über Neue von [Quelle] bis [Ziel]. Da CmdLets eine Art Overkill (und Leistungsverlust) ist, schlage ich einen einfachen Batch-Befehl vor, der auch in Powershell ausgeführt werden kann.

xcopy [source] [destination] /T /E 

xcopy ist eine Funktion Bäume Datei- und Verzeichnis zu kopieren. Hilfe bietet uns Informationen über nützliche Parameter für den Fall:

/T Erstellt Verzeichnisstruktur, aber kopiert keine Dateien. Enthält keine leeren Verzeichnisse oder Unterverzeichnisse./T/E enthält

/E Kopiert Verzeichnisse und Unterverzeichnisse, einschließlich leere. Wie/S/E. Kann zum Ändern von/T verwendet werden.

Verwandte Themen