Batch bestimmte Dateien verschieben ohne Ordnerstruktur
Hallo.
Ich möchte aus mehreren Ordnern und Unterordnern bestimmte Dateien in ein anderes Verzeichnis verschieben.
Habe schon dies probiert:
Das funktioniert soweit. Es werden die mp4 Dateien verschoben, nur legt es mir auch wieder die Unterordner an. Das soll aber nicht sein.
Hat jemand eine Lösung? Danke.
EDIT:
Hab es jetzt so hinbekommen:
Jetzt wäre es noch gut, wenn die Ordner woe die Datei drin war auch gleich noch gelöscht werden.
Ich möchte aus mehreren Ordnern und Unterordnern bestimmte Dateien in ein anderes Verzeichnis verschieben.
Habe schon dies probiert:
Robocopy "D:\Bearbeiten" "D:\MKV" /MOV /S /R:2 /W:10 /IF "*.mp4"
Das funktioniert soweit. Es werden die mp4 Dateien verschoben, nur legt es mir auch wieder die Unterordner an. Das soll aber nicht sein.
Hat jemand eine Lösung? Danke.
EDIT:
Hab es jetzt so hinbekommen:
@echo off
For /F "Tokens=*" %%i in ('Dir /B /S "D:\Movies\*.mp4"') do Move /Y "%%~fi" "D:\Movies\MP4"
:ende
Echo.
Pause
Jetzt wäre es noch gut, wenn die Ordner woe die Datei drin war auch gleich noch gelöscht werden.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 244785
Url: https://administrator.de/forum/batch-bestimmte-dateien-verschieben-ohne-ordnerstruktur-244785.html
Ausgedruckt am: 03.04.2025 um 22:04 Uhr
14 Kommentare
Neuester Kommentar
Hallo OOmatrixOO und willkommen im Forum!
Im einfachsten Fall etwa so:
- das würde aber voraussetzen, dass sich nur *.mp4-Files in den Ordnern befinden und es auch keine Unterordner gibt.
Alternativ dazu könntest Du, anstatt die Dateien einzeln durchzugehen, gleich auf Ordnerebene ansetzen:
Hier wird, nur wenn der "
Grüße
bastla
Im einfachsten Fall etwa so:
For /F "Tokens=*" %%i in ('Dir /B /S "D:\Movies\*.mp4"') do Move "%%~fi" "D:\Movies\MP4" & rd "%%~dpi" 2>nul
Alternativ dazu könntest Du, anstatt die Dateien einzeln durchzugehen, gleich auf Ordnerebene ansetzen:
For /D %%i in ("D:\Movies\*") do echo Move "%%i\*.mp4" "D:\Movies\MP4" && echo rd /s /q "%%i"
move
"-Befehl ohne Fehler durchgeführt wurde (wird erreicht durch die Verknüpfung mit "&&
"), der Ordner samt allen noch enthaltenen Dateien und Unterordnern gelöscht - solange die "echo
" vor den Befehlen "move
" und "rd
" stehen, werden die Befehle allerdings (zum gefahrlosen Testen) nur angezeigt, aber nicht ausgeführt.Grüße
bastla
Hallo OOmatrixOO!
Da der Zielordner "MP4" auch unterhalb von "D:\Movies" liegt (hatte ich vorhin nicht beachtet
), wird natürlich auch dieser mit verarbeitet - ausschließen ließe er sich etwa so:
Ansonsten zum Testen "
Grüße
bastla
Da der Zielordner "MP4" auch unterhalb von "D:\Movies" liegt (hatte ich vorhin nicht beachtet
For /D %%i in ("D:\Movies\*") do if /i "%%~nxi" neq "MP4" (echo Move "%%i\*.mp4" "D:\Movies\MP4" && echo rd /s /q "%%i")
echo on
" verwenden - so kannst Du die einzelnen Schritte nachvollziehen ...Grüße
bastla
Hallo OOmatrixOO!
Die Meldung
sollte es eigentlich nur für Ordner geben, in denen sich keine *.mp4-Datei befindet ...
Während des Testens würde ich diese Meldung auch nicht unbedingt unterdrücken, aber danach kannst Du sie mit
verschwinden lassen.
Nur zur Sicherheit: Den Zielordner hast Du schon vor dem Verschieben erstellt?
Wenn Du die Schreibweise "D:\Movies\MP4\" (mit abschließendem "\") verwendest, erhältst Du,wenn es den Zielordner noch nicht gibt (und solange die Fehlermeldungen nicht, wie beschrieben, ins "Nichts" umgeleitet werden), die Meldung
Grüße
bastla
Die Meldung
Dateiname existiert bereits, oder die Datei
konnte nicht gefunden werden.
Während des Testens würde ich diese Meldung auch nicht unbedingt unterdrücken, aber danach kannst Du sie mit
Move "%%i\*.mp4" "D:\Movies\MP4\" 2>nul
Nur zur Sicherheit: Den Zielordner hast Du schon vor dem Verschieben erstellt?
Wenn Du die Schreibweise "D:\Movies\MP4\" (mit abschließendem "\") verwendest, erhältst Du,wenn es den Zielordner noch nicht gibt (und solange die Fehlermeldungen nicht, wie beschrieben, ins "Nichts" umgeleitet werden), die Meldung
Das System kann den angegebenen Pfad nicht finden.
bastla
Hallo OOmatrixOO!
Bei einer Verschachtelung auf zwei Ebenen wäre es grundsätzlich möglich, beide abzuarbeiten - soferne es etwa für Ebene 2 (also Unter-Unterordner) einheitliche Ordnernamen gäbe, ließe sich das relativ einfach umsetzen, indem diese Ordner mit angegeben würden, also etwa
- ansonsten eben mit einer weiteren Schleife oder doch per "
Könntest Du vielleicht schematisch die Ordner- und Dateienstruktur beschreiben und auch genau sagen, unter welchen Umständen welche Ordner gelöscht werden sollen?
Das Miteinbeziehen mehrerer Endungen sollte übrigens kein Problem sein ...
Grüße
bastla
Bei einer Verschachtelung auf zwei Ebenen wäre es grundsätzlich möglich, beide abzuarbeiten - soferne es etwa für Ebene 2 (also Unter-Unterordner) einheitliche Ordnernamen gäbe, ließe sich das relativ einfach umsetzen, indem diese Ordner mit angegeben würden, also etwa
Move "%%i\Unter-Unterordnername\*.mp4" "D:\Movies\MP4\" 2>nul
dir /s /b
".Könntest Du vielleicht schematisch die Ordner- und Dateienstruktur beschreiben und auch genau sagen, unter welchen Umständen welche Ordner gelöscht werden sollen?
Das Miteinbeziehen mehrerer Endungen sollte übrigens kein Problem sein ...
Grüße
bastla
Hallo OOmatrixOO!
Du hast jetzt beide Versionen vermischt - mit "
Unter der Annahme, dass nicht sowohl *.mp4- als auch *.avi-Dateien in einem Ordner liegen, würde es sich anbieten, getrennte Durchläufe für die verschiedenen Dateitypen durchzuführen (da ja vermutlich auch getrennte Zielordner verwendet werden) - also einfach die gleiche Zeile mit den entsprechenden Anpassungen nochmals in deinen Batch einfügen.
Sollten beide (oder noch mehr zu verschiebende) Dateitypen innerhalb eines Ordners möglich sein, würde ich eher zunächst verschieben und danach nochmals alle Ordner durchgehen und nur solche löschen, in denen sich keine der Dateitypen mehr befinden ...
Grüße
bastla
Du hast jetzt beide Versionen vermischt - mit "
for /d
" sähe das zB so aus:For /d %%i in ("D:\Movies\*"') do if /i "%%~nxi" neq "MP4" for /d %%j in ("%%i\*") do (Move "%%j\*.mp4" "D:\Movies\MP4" 2>nul && rd /s /q "%%j") >> D:\Movies\MP4\Logfile.log 2>>&1
Sollten beide (oder noch mehr zu verschiebende) Dateitypen innerhalb eines Ordners möglich sein, würde ich eher zunächst verschieben und danach nochmals alle Ordner durchgehen und nur solche löschen, in denen sich keine der Dateitypen mehr befinden ...
Grüße
bastla
Hallo OOmatrixOO!

Das "
Grüße
bastla
Ich hoffe, ich habe das so richtig gemacht.
Richtig ist es, wenn der Batch das macht, was Du willst ... Wird eine Datei aus einem Unter-Unterordner verschoben, wird auch der Unter-Unterordner gelöscht, aber nicht der Unterordner.
Kann er ja nicht, da in anderen Unter-Unterordnern noch Daten vorhanden sein könnten. Wenn Du genaue Kriterien hast, bei welchem Inhalt (bzw Nicht-Inhalt) ein Ordner entbehrlich ist, könntest Du, wie oben schon angesprochen, am Ende nochmals eine Schleife über alle Unterordner (nicht Unter-UInterordner) laufen lassen und diese einzeln (aber samt aller darin enthaltenen Unter-Unterordner) entfernen - etwa, wenn alle weg sollen, in / unter denen keine .mp4- und keine .avi-Dateien mehr liegen (ungetestet):for /d %%i in ("D:\Movies\*") do if /i "%%~nxi" neq "MP4" dir /s /b "%%i\*.avi" "%%i\*.mp4">nul 2>nul || echo rd /s /q "%%i"
echo
" ist natürlich wieder zum Testen drin ...Grüße
bastla
Hallo OOmatrixOO!
Zum Loggen kannst Du einfach ein "
Noch eine Anmerkung (zumindest für Deinen nächsten Thread, obwohl sich Kommentare ja auch editieren lassen): Wir hätten für (Batch-)Code eine pasende Formatierungsmöglichkeit ...
Grüße
bastla
Zum Loggen kannst Du einfach ein "
echo
" dranhängen:for /d %%i in ("D:\Movies\*") do if /i "%%~nxi" neq "MP4" dir /s /b "%%i\*.avi" "%%i\*.mp4">nul 2>nul || (echo rd /s /q "%%i" && echo "%%i">>D:\Movies\MP4\Logfile.log)
Grüße
bastla