schnittel
Goto Top

Kopieren von Ordnern und größter Datei per Batch

Hallo,

ich habe folgendes Problem:
über die Jahre habe ich meine komplette DVD Sammlung als Sicherheitskopie auf Festplatte gesichert. Jeder Film ist ein Ordner. Als Komplettsicherung der einzelnen DVD sind auch jede Menge unwichtiger Dateien mit in der Sicherung gelandet, wie z.B. Trailer und Making-of.
Jetzt möchte ich meine Sammlung (knapp 2500 Filme) auf einen Medienserver bringen, dabei stört in der Menge natürlich jede einzelne Datei zuviel.

Ich suche daher eine Batch, mit der ich die Filmordner mitsamt nur ihrer jeweils größten enthaltenen Datei (dem eigentlichen Film) von A nach B kopieren kann.

Dabei sollen die Originalordner mitsamt allen Dateien (unter A) erhalten bleiben

Könnte mir dabei bitte mal jemand zur Hand gehen und helfen?

Liebe Grüße,
Schnittel

Content-ID: 3707815550

Url: https://administrator.de/forum/kopieren-von-ordnern-und-groesster-datei-per-batch-3707815550.html

Ausgedruckt am: 22.04.2025 um 19:04 Uhr

3479126418
3479126418 20.08.2022, aktualisiert am 21.08.2022 um 01:39:53 Uhr
Goto Top
@echo off &setlocal enabledelayedexpansion
set "quelle=d:\filme"  
set "ziel=f:\filme"  
for /d %%a in ("%quelle%\*") do (  
    md "%ziel%\%%~nxa" >nul 2>&1  
    set "big="  
    for /f "delims=" %%b in ('dir /b /a-d /os "%%a"') do set "big=%%b"  
    if defined big copy "%%a\!big!" "%ziel%\%%~nxa\"  
)
Lässt sich eine Mindestgröße der Dateien definieren schau dir auch mal Robocopy mit dem Parameter /min:<größe> an, das macht das dann ebenfalls noch simpler

https://docs.microsoft.com/de-de/windows-server/administration/windows-c ...
Schnittel
Schnittel 20.08.2022 um 19:22:16 Uhr
Goto Top
Hallo buddafisch,

vielen Dank für deine Hilfe und die schnelle Antwort!
Leider läufts noch nicht so ganz. Die Pfade von Quelle & Ziel sind natürlich angepasst, extra auch noch mal verkürzt, damit nicht die Pfadlänge beim Dateinamen Probleme schafft. In diesem Zustand passiert bei der Batch leider gar nichts .
Dann bin ich die Zeilen nochmal durchgegangen und habe in

@echo off & setlocal enabledelayedexpansion
set "quelle=C:\0\TEST"
set "ziel=D:\1"
for /d %%a in ("%quelle%\*") do (md "%ziel%\%%~nxa" >nul 2>&1
for /f "delims=" %%b in ('dir /b /a-d /os "%%a"') do set "big=%%b" copy "%%a\!big!" "%ziel%\%%~nxa\")

Zeile -1- "&" und "setlocal" voneinander getrennt,
Zeile -5- ein fehlendes -'- in "%%a"') ergänzt. Stimmt das so?

In diesem Zustand werden die Testordner von Quelle zu Ziel kopiert, allerdings allesamt ohne jeglichen Inhalt.
Wie kann ich den Code weiter anpassen?
3479126418
3479126418 20.08.2022, aktualisiert am 21.08.2022 um 01:40:54 Uhr
Goto Top
Zeile -1- "&" und "setlocal" voneinander getrennt,
Überflüssig, geht beides.
Zeile -5- ein fehlendes -'- in "%%a"') ergänzt. Stimmt das so?
Ja, vergessen, sorry

Lüppt hier so einwandfrei. Wir kennen leider deine Ordnerstruktur nicht, da du diese nicht weiter spezifiziert hast. Obiges verarbeitet nur Dateien die direkt unterhalb der Unterordner liegen, keine weiteren Subordner, wenn du das willst muss es weiter angepasst werden (per dir /s).

@echo off &setlocal enabledelayedexpansion
set "quelle=d:\filme"  
set "ziel=f:\filme"  
for /d %%a in ("%quelle%\*") do (  
    md "%ziel%\%%~nxa" >nul 2>&1  
    set "big="  
    for /f "delims=" %%b in ('dir /b /s /a-d /os "%%a"') do set "big=%%b"  
    if defined big copy "!big!" "%ziel%\%%~nxa\"  
)
MysticFoxDE
MysticFoxDE 21.08.2022 um 07:23:50 Uhr
Goto Top
Moin Schnittel,

Ich suche daher eine Batch, mit der ich die Filmordner mitsamt nur ihrer jeweils größten enthaltenen Datei (dem eigentlichen Film) von A nach B kopieren kann.

hat diese Datei vielleicht einen bestimmten Dateityp nachdem man filtern könnte?

Beste Grüsse aus BaWü
Alex
Schnittel
Schnittel 21.08.2022 um 14:02:00 Uhr
Goto Top
Hallo 3479126418,

die Sicherungen liegen sortiert in den Ordnern Filme und Serien, in diesen direkt als
Unterordner mit Film- oder Serienname die individuelle DVD Sicherung; in diesen Unterordner liegen dann die eigentlichen Film- / Seriendateien mit dem ganzen Krempel unnötiger Zusatzdateien
Bsp.
Filme
--Salt
---Salt.mkv
---Müll1.mkv
---Müll2.xy, usw

Habe die neue Modifikation der Batch in meiner Ordnerstruktur noch mal von verschiedenen Ebenen aus gestartet. Die Batch kopiert regelmäßig den Namenordner aus der Ebene, von wo ich gestartet habe mitsamt einer einzigen Filmdatei (nicht mal die Größte) von A nach B.
Da ich keine Ahnung von Batch habe, ist es vielleicht einfacher die Batch so zu schreiben, dass "quelle = "von da, wo ich gestartet habe" " automatisch gesetzt wird?
Schnittel
Schnittel 21.08.2022 um 14:06:11 Uhr
Goto Top
Hallo Alex (Grüße nach BaWü face-smile),

die Filme, Serien und auch große Teile des Mülls sind allesamt in .mkv Format.
Mein Hauptunterscheidungskriterium der Filmedateien, die ich mitkopieren will, ist, dass es die jeweils größten Dateien im einzelnen Filmordner sind.
Der ganze andere Müll ist kleiner als die jeweilige Filmdatei.

Viele Grüße aus Hamburg,
Schnittel
3714160434
Lösung 3714160434 22.08.2022 aktualisiert um 17:54:25 Uhr
Goto Top
@echo off
set "quelle=%~dp0"  
set "ziel=f:\ziel"  
powershell -Executionpolicy Bypass -Command "Get-ChildItem '%quelle%' -Directory -PipelineVariable f | foreach{Get-ChildItem $_.Fullname -File -Recurse | sort Length -Descending | select -First 1 | copy-item -Destination {(md (join-path '%ziel%' $f.Name) -Force).Fullname} -verbose}"  
pause

screenshot
Schnittel
Schnittel 22.08.2022 um 20:37:28 Uhr
Goto Top
Ich hatte mich mit Powershell und den Möglichkeiten noch gar nicht auseinander gesetzt,
aber es läuft ganz hervorragend! Ich bin ganz aus dem Häuschen und Happy!
Euch Allen lieben Dank, dass ihr mir so schnell und unkompliziert geholfen habt!!!

Liebe Grüße,
Schnittel