lupora
Goto Top

Mit Powershell automatisiert Ordner erstellen und Dateien einfügen

Hallo zusammen,

ich wollte ein Skript bauen das folgendes tut:

1. Es durchsucht eine Ordnerstruktur und legt in jedem gefundenen Ordner zwei Unterordner an mit Namen X und Y.
2. In diese Unterordner kopiert es den gesamten Inhalt der bisher in dem Ordner drin ist (natürlich ohne die Beiden neuen Ordner X & Y).

Die Ordner sind immer so aufgebaut:

Ordnername
-- Datei1.jpg
-- Datei2.jpg

Die neue Struktur wäre dann:

Ordnername
-- OrdnerX
--- Datei 1.jpg
--- Datei 2.jpg
-- OrdnerY


Soviel habe ich schon hinbekommen:
[STRING] $pfad = "C:\Users\Desktop\Struktur"  
[STRING] $ordnername1 = "Train"  
[STRING] $ordnername2 = "Eval"  


Get-ChildItem -path $pfad |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
    Write-host $_.FullName
    new-item ($_.FullName+"\$ordnername1") -type directory    
    new-item ($_.FullName+"\$ordnername2") -type directory  
}

pause

Wie kann ich einbauen das er nach der Erstellung der Ordner die Bilder in den Ordner X kopiert?

Content-ID: 619406

Url: https://administrator.de/contentid/619406

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

Doskias
Doskias 05.11.2020 aktualisiert um 14:54:11 Uhr
Goto Top
Hi Lupora,

versuch es mal mit
copy-item [Ausgangspfad]\*.jpg [Zielpfad]
 copy-item c:\Temp\*.jpg c:\Temp\Unterordner 

Gruß
Doskias
SlainteMhath
SlainteMhath 05.11.2020 um 14:54:00 Uhr
Goto Top
Moin,

was spricht dagegen die Files mittels Copy-Item zu kopieren? Vor allem weil die Dateien ja immer gleich benannt sind.

lg,
Slainte
Lupora
Lupora 05.11.2020 um 14:57:47 Uhr
Goto Top
Würde auch move gehen? Das Kopieren würde lang dauern. Eigentlich reicht es mir wenn er die Dateien in den neuen Ordner verschiebt
Doskias
Doskias 05.11.2020 aktualisiert um 15:01:46 Uhr
Goto Top
Zitat von @Lupora:

Würde auch move gehen? Das Kopieren würde lang dauern. Eigentlich reicht es mir wenn er die Dateien in den neuen Ordner verschiebt


Move-Item = verschieben
copy-item = kopieren.

Du hattest in deinem Post nach kopieren gefragt face-smile
Lupora
Lupora 05.11.2020 um 15:07:15 Uhr
Goto Top
ups!

Tatsächlich will ichs verschieben. Muss ich dann überhaupt den Ordner erst noch erstellen? Oder würde er beim Verschieben den Ordner anlegen?
Lupora
Lupora 05.11.2020 um 15:09:46 Uhr
Goto Top
So klappt es nicht :/


[STRING] $pfad = "C:\Users\Desktop\Struktur"  
[STRING] $ordnername1 = "Train"  
[STRING] $ordnername2 = "Eval"  


Get-ChildItem -path $pfad |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
    Write-host $_.FullName
    new-item ($_.FullName+"\$ordnername1") -type directory    
    new-item ($_.FullName+"\$ordnername2") -type directory  
    move-item $pfad+$_.FullName\*.jpg $pfad+$_.FullName+"\$ordnername1"  
    
}

pause
Doskias
Doskias 05.11.2020 um 15:11:45 Uhr
Goto Top
Zitat von @Lupora:

ups!

Tatsächlich will ichs verschieben. Muss ich dann überhaupt den Ordner erst noch erstellen? Oder würde er beim Verschieben den Ordner anlegen?

Jetzt kommen wir langsam in den Bereich wo du es einfach mal ausprobieren könntest. Durch selber machen lernst du mehr als durch fragen. Zumindest bei dieser einen Frage kann grade nichts gefährliches passieren. Entweder er legt den Ordner an und kopiert es rein oder du bekommst eine Fehlermeldung, dass der Ordner nicht gefunden werden konnte. face-smile

Oder du liest dir einfach mal mit get-help move-item und get-help copy-item die Befehle durch. dann lernst du auch gleich alle Möglichkeiten kennen. Es gibt dann übrigens auch noch rename-item und delete-item wo wir grade dabei sind

Gruß
Doskias
Lupora
Lupora 05.11.2020 um 15:28:30 Uhr
Goto Top
Feddig ! Danke euch beiden!

Gibts noch Optimierungspotential fürs Script? Es klappt bisher gut.
Wird aber circa 1,5 Millionen Ordner iterieren.

[STRING] $pfad = "C:\Users\Struktur"  
[STRING] $ordnername1 = "Train"  
[STRING] $ordnername2 = "Eval"  


Get-ChildItem -path $pfad |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
    Write-host $_.FullName
    # Ordnererstellung
    new-item ($_.FullName+"\$ordnername1") -type directory    
    new-item ($_.FullName+"\$ordnername2") -type directory  
    # Bild Dateien werden verschoben
    move-item $pfad\$_\*.jpg $pfad\$_\$ordnername1 
    
}

pause
Doskias
Doskias 05.11.2020 um 15:30:42 Uhr
Goto Top
Zitat von @Lupora:
Gibts noch Optimierungspotential fürs Script? Es klappt bisher gut.

Wieso das Pause am Ende? face-smile
SlainteMhath
SlainteMhath 05.11.2020 um 16:11:19 Uhr
Goto Top
Gibts noch Optimierungspotential fürs Script?
Ein paar try...catch würde ich noch einbauen, ebenso wie eine Log-Funktion