Alle Dateien eines Typs in Unterordnern in ein anderes Verzeichnis kopieren, aber so, dass sie in einem einzigen Unterverzeichnis liegen
Hallo, ich habe folgendes Problem:
Ich habe viele *.php dateien, diese liegen in jeweils verschiedenen Unternordnern also C:\PfadZumOberverzeichnis\{A bis n}\ und mit ein paar Unterordnern, manchmal 2 manchmal 5 also \..\..\..\..\n\*.php - Ich möchte nun, dass
1. alle php Dateien aus dem allen Unterordnern NACH A\ gesucht werden und in das Verzeichnis \{A-n}\php kopiert werden (ich muss sie online hochladen, deswegen der Aufwand).
Wunderbar wäre es auch noch, wenn ich dann später die Dateien auch wieder per Batch oder Powershell-Script zurückkopieren könnte. also aus irgendeinem Ordner soll er
1. in allen (oben) vorhandenen Unterordnern ..\{A bis n}\(ab hier also\..\..\ suchen, ob eine Datei mit gleichem Namen vorhanden ist und diese dann ohne Rückfrage ersetzen.
Ich weiß, dass ich irgendwie dafür for Schleifen brauche, und Variablen festlegen muss. Wie kann ich denn unbestimmte Ordnerhierarchien festlegen? also \X\..\..\..\{A bis n} ist jetzt Variable irgendwas?
es ist relativ wichtig - wenn jemand eine gute Idee dazu hat, wäre ich ihm/ihr sehr verbunden.
Liebe Grüße an alle
PS:\{A bis n} steht nur für den Ordner, in dem die ganzen Unterverzeichnisse anfangen. Alles was ÜBER diesem Ordner ist, braucht nicht durchsucht zu werden.
Ich habe viele *.php dateien, diese liegen in jeweils verschiedenen Unternordnern also C:\PfadZumOberverzeichnis\{A bis n}\ und mit ein paar Unterordnern, manchmal 2 manchmal 5 also \..\..\..\..\n\*.php - Ich möchte nun, dass
1. alle php Dateien aus dem allen Unterordnern NACH A\ gesucht werden und in das Verzeichnis \{A-n}\php kopiert werden (ich muss sie online hochladen, deswegen der Aufwand).
Wunderbar wäre es auch noch, wenn ich dann später die Dateien auch wieder per Batch oder Powershell-Script zurückkopieren könnte. also aus irgendeinem Ordner soll er
1. in allen (oben) vorhandenen Unterordnern ..\{A bis n}\(ab hier also\..\..\ suchen, ob eine Datei mit gleichem Namen vorhanden ist und diese dann ohne Rückfrage ersetzen.
Ich weiß, dass ich irgendwie dafür for Schleifen brauche, und Variablen festlegen muss. Wie kann ich denn unbestimmte Ordnerhierarchien festlegen? also \X\..\..\..\{A bis n} ist jetzt Variable irgendwas?
es ist relativ wichtig - wenn jemand eine gute Idee dazu hat, wäre ich ihm/ihr sehr verbunden.
Liebe Grüße an alle
PS:\{A bis n} steht nur für den Ordner, in dem die ganzen Unterverzeichnisse anfangen. Alles was ÜBER diesem Ordner ist, braucht nicht durchsucht zu werden.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 562653
Url: https://administrator.de/forum/alle-dateien-eines-typs-in-unterordnern-in-ein-anderes-verzeichnis-kopieren-aber-so-dass-sie-in-einem-562653.html
Ausgedruckt am: 07.04.2025 um 11:04 Uhr
26 Kommentare
Neuester Kommentar

Öh, den Link von oben lesen kannst du nicht, da stehts ?!
usw....
/s Copies subdirectories. Note that this option excludes empty directories.
/r:<N> Specifies the number of retries on failed copies. The default value of N is 1,000,000 (one million retries).
/w:<N> Specifies the wait time between retries, in seconds. The default value of N is 30 (wait time 30 seconds).
Hallo,
Gruß,
Peter
Zitat von @Julia1989:
das geht leider nicht, weil es ein webformular ist, nicht auf einen Server. Ich probiere gleich robocopy mal aus, das wäre natürlich super wenn das gehen würde. /s /w:1 /r:1 - was bedeuten die parameter? und schon mal danke für die ganz schnelle hilfe
Mal ein Robocopy /? in einer Komandozeile gemacht? Wirkt Wiunder...das geht leider nicht, weil es ein webformular ist, nicht auf einen Server. Ich probiere gleich robocopy mal aus, das wäre natürlich super wenn das gehen würde. /s /w:1 /r:1 - was bedeuten die parameter? und schon mal danke für die ganz schnelle hilfe
Gruß,
Peter

Zitat von @Julia1989:
Das Problem ist, dass er dann die Struktur Ordner\Unterordner\..... auch im Ziel benutzt.
Das Problem ist, dass er dann die Struktur Ordner\Unterordner\..... auch im Ziel benutzt.
Dann solltest du auch gleich richtig fragen und nicht so:
Alle Dateien eines Typs in Unterordnern in ein anderes Verzeichnis kopieren, aber so, dass die Verzeichnisstruktur erhalten bleibt
Gibt es einen befehl, so das Kopieren AUS einer Hierarchie IN einen Ordner ohne Hieracrchie funktioniert?
Logo, Powershell z.B. sols "C:\Quelle" -Filter *.php -File -recurse | copy-item -destination "C:\Ziel" -verbose -Force
Klar sollte dir aber hierbei sein das es bei Dateien mit dem selben Namen gezwungenermaßen zu Konflikten kommt wenn diese alle in einem Ordner landen sollen!
Und, dass es beim zurück kopieren nicht wieder in die alte Hierarchie zurück geht. Denn woher soll das entsprechende Tool wissen in welchem Ordner eine Datei früher mal war?!

Zitat von @Julia1989:
ok, das wäre meine nächste frage. Es soll so aussehen: X:\A\1\2\3 -> Dateien *.php X:\A\php
Code oben hast du übersehen?? Der macht das schon so wie du willst.ok, das wäre meine nächste frage. Es soll so aussehen: X:\A\1\2\3 -> Dateien *.php X:\A\php
mit PowerShell kenne ich mich so gar nicht aus
Dann wirds Zeit sich damit auseinanderzusetzen.Vielleicht erst mal genau nachdenken was du wirklich willst und dann erst schreiben.
Hallo,
Gruß,
Peter
Zitat von @Julia1989:
wie kann ich das definieren? ich habe mich schon etwas belesen und viel gefunden zu dem Thema, aber die möglichkeit, eine bestimmte Stelle als Variable zu nehmen habe ich nicht gefunden. Ich hatte $x und $_ versucht, hatte aber nicht geklappt!
https://www.script-example.com/powershell-basicswie kann ich das definieren? ich habe mich schon etwas belesen und viel gefunden zu dem Thema, aber die möglichkeit, eine bestimmte Stelle als Variable zu nehmen habe ich nicht gefunden. Ich hatte $x und $_ versucht, hatte aber nicht geklappt!
Gruß,
Peter

Zitat von @Julia1989:
der Powershell befehl von oben funktioniert NICHT. Ich möchte Powershell sagen, dass der Name des Ordners C:\Users\x\Desktop\Hauptordner\UNTERORDNER\..\..\..\ dem Pfad C:\Users\x\Desktop\Hauptordner angefügt wird - also C.\Users\x\Desktop\x\Desktop\Hauptordner\Unterordner(n-fach)\php
Sorry aber du schwenkst dauernd hin und her!! Erst soll alles mit der originalen Ordner-Struktur in den anderen Ordner (was übrigens Robocopy bereits hervorragend erledigt), dann willst du erneut das alles aus den Unterordnern flach in einen einzigen Ordner kopiert werden soll, und jetzt wieder das erste?? Entscheide dich bitte !! Das gewünschte macht dir bereits der Robocopy Befehl und da ist nichts weiter nötig.der Powershell befehl von oben funktioniert NICHT. Ich möchte Powershell sagen, dass der Name des Ordners C:\Users\x\Desktop\Hauptordner\UNTERORDNER\..\..\..\ dem Pfad C:\Users\x\Desktop\Hauptordner angefügt wird - also C.\Users\x\Desktop\x\Desktop\Hauptordner\Unterordner(n-fach)\php
Wenn du das Robocopy mit der PS simulieren willst geht das nat. auch, ist aber je eigentlich nicht nötig
$quelle = "c:\Quelle"
$ziel = "c:\Ziel\php"
if (!(Test-Path $ziel)){md $ziel -Force | out-null}
ls $quelle -Filter *.php -File -recurse | %{
$t = $_.DirectoryName -replace [regex]::Escape($quelle),$ziel
if(!(Test-Path $t)){md $t -Force | out-null}
$_ | copy-item -Destination $t -verbose
}

Alter man kann sich auch einen abbrechen mit der Erklärung .... da ist der Corona-Virus ja noch harmlos dagegen
$quellen = 'c:\quelleA','c:\quelleB','c:\quelleC'
foreach($quelle in $quellen){
ls $quelle -dir -exclude php | %{
ls $_.Fullname -recurse -Filter *.php | copy-item -Destination "$($quelle.Fullname)\php" -verbose
}
}
Hallo,
Hast du wenigstens eine gute und funktionelle Datensicherung? Und Robocopy kann dir gar die eine Datei die du auf deine Platte hast unter den anderen 10 Millionen Dateien finden und kopieren. Einfach mal mit beschäftigen. Und Bedenke für was der Name steht "Robust File Copy" siehe auch mal hier https://en.wikipedia.org/wiki/Robocopy oder gar hier https://docs.microsoft.com/en-us/windows-server/administration/windows-c ...
Den Parameter /L solltest du dir angewönen sowie /Log: oder /Log+:
Gruß,
Peter
Hast du wenigstens eine gute und funktionelle Datensicherung? Und Robocopy kann dir gar die eine Datei die du auf deine Platte hast unter den anderen 10 Millionen Dateien finden und kopieren. Einfach mal mit beschäftigen. Und Bedenke für was der Name steht "Robust File Copy" siehe auch mal hier https://en.wikipedia.org/wiki/Robocopy oder gar hier https://docs.microsoft.com/en-us/windows-server/administration/windows-c ...
Den Parameter /L solltest du dir angewönen sowie /Log: oder /Log+:
Gruß,
Peter

ls "c:\Wurzel" -Dir | %{
$dest = "$($_.Fullname)\php"
if(!(Test-Path $dest)){md $dest -force | out-null}
ls $_.Fullname -dir -exclude php | %{
ls $_.Fullname -recurse -Filter *.php -File | copy-item -Destination $dest -verbose
}
}
So dat war es von meiner Seite.
Tschö und blivet jesund.
#edit# typo's korrigiert.

Zitat von @Julia1989:
ok, er versteht leider das php nur als datei, nicht als Ordner und schreibt alles in den dateinamen "php".
War nur ein Typo, wurde getestet geht hier einwandfrei ...ok, er versteht leider das php nur als datei, nicht als Ordner und schreibt alles in den dateinamen "php".