Ich habe eine Reihe von Projekten, die eine Mischung aus projektspezifischen Dateien und gemeinsamen Dateien enthalten. Ich versuche, Inhalte aus zwei verschiedenen Ordnern - einem projektspezifischen Ordner und einem allgemeinen Ordner - in einen einzelnen Ordner zu kopieren, der nach dem Projekt benannt ist. Ich möchte auch alle Ordnerhierarchien aus den ursprünglichen Ordnern beibehalten.unerwartete Struktur beim Kopieren von Ordnern in Windows Powershell
Zum Beispiel, einige Pfade zu den gemeinsamen Dateien:
src\Common\PackageAssets\logo1.jpg
src\Common\PackageAssets\logo2.jpg
Und Beispiel Pfade zu projektspezifischen Dateien:
src\Projects\ProjectA\PackageFiles\readme.txt
src\Projects\ProjectA\PackageFiles\scale-100\projA.png
Das gewünschte Ergebnis nach dem Kopieren wäre:
bld\ProjectA\pkgFiles\logo1.png
bld\ProjectA\pkgFiles\logo2.png
bld\ProjectA\pkgFiles\readme.txt
bld\ProjectA\pkgFiles\scale-100\projA.png
Was ich benutze ist dies:
[string]$pkgContentPath = "bld\$project\pkg_contents"
# copy common files
Copy-Item -Path .\src\Common\PackageAssets -Recurse -Destination $pkgContentPath
# copy project-specific files
Copy-Item -Path .\src\Projects\ProjectA\PackageFiles\ -Recurse -Destination $pkgContentPath
Doch statt der erwarteten Ergebnisse, werden alle Dateien enden in einem zusätzlichen Ebene von Unterordner bis:
bld\ProjectA\pkgFiles\PackageAssets\logo1.png
bld\ProjectA\pkgFiles\PackageAssets\logo2.png
bld\ProjectA\pkgFiles\PackageFiles\readme.txt
bld\ProjectA\pkgFiles\PackageFiles\scale-100\projA.png
ich ratlos bin. Ich kann nicht herausfinden, wie ich die zusätzliche Unterordnerschicht los werde. Ich habe versucht, Get-ChildItem-Piping zu Copy-Item zu verwenden, aber dann sind die Unterordnerhierarchien verloren gegangen.
In einer BAT-Datei, das funktioniert:
xcopy src\Common\PackageAssets\* bld\%project\pkg_contents /s
xcopy src\Projects\%project\PackageFiles bld\%project\pkg_contents /s
Ich glaube, ich xcopy verwenden könnte, aber sicher muss es eine Möglichkeit geben, diese Cmdlets zu tun.
'New-Item bld \ ProjectA \ pkgFiles -Art-Verzeichnis; Kopiere-Item -Path. \ Src \ Common \ Paketdatei \ * bld \ ProjectA \ pkgFiles -Recurse; Copy-Item -Path. \ Src \ Projekte \ ProjectA \ PackageFiles \ * bld \ ProjectA \ pkgFiles -Recurse' – PetSerAl
Was noch merkwürdig ist, ist, dass die Ergebnisse unterschiedlich sind, wenn ich Befehle in der Konsole statt von einem Skript aus führe. – Peter