Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch bestimmte Dateien verschieben ohne Ordnerstruktur

Frage Entwicklung Batch & Shell

Mitglied: OOmatrixOO

OOmatrixOO (Level 1) - Jetzt verbinden

27.07.2014, aktualisiert 31.07.2014, 2152 Aufrufe, 14 Kommentare

Hallo.
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.
Mitglied: bastla
27.07.2014 um 20:21 Uhr
Hallo OOmatrixOO und willkommen im Forum!

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
- 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:
For /D %%i in ("D:\Movies\*") do echo Move "%%i\*.mp4" "D:\Movies\MP4" && echo rd /s /q "%%i"
Hier wird, nur wenn der "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
Bitte warten ..
Mitglied: OOmatrixOO
27.07.2014 um 21:39 Uhr
Hallo.

Ja es kann vorkommen, das es Unterordner und auch andere Dateien in den Ordnern gibt. Die sollen auch mit gelöscht werden.

Wenn ich die 2. Variante probiere, bekomme ich nur die Meldung: Dateiname existiert bereits, oder die Datei konnte nicht gefunden werden.
Im Prinzip wäre die Variante genau passend.

MfG
Bitte warten ..
Mitglied: bastla
27.07.2014, aktualisiert 28.07.2014
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:
For /D %%i in ("D:\Movies\*") do if /i "%%~nxi" neq "MP4" (echo Move "%%i\*.mp4" "D:\Movies\MP4" && echo rd /s /q "%%i")
Ansonsten zum Testen "echo on" verwenden - so kannst Du die einzelnen Schritte nachvollziehen ...

Grüße
bastla
Bitte warten ..
Mitglied: OOmatrixOO
27.07.2014 um 22:44 Uhr
Hallo.

Leider tut sich auch damit nix. Immer noch die gleiche Meldung. Auch wenn ich andere Ordner eintrage. Da ist irgendwo noch der Wurm drin.

MfG
Bitte warten ..
Mitglied: bastla
28.07.2014 um 09:01 Uhr
Hallo OOmatrixOO!

Die Meldung
Dateiname existiert bereits, oder die Datei 
konnte nicht gefunden werden.
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
Move "%%i\*.mp4" "D:\Movies\MP4\" 2>nul
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
Das System kann den angegebenen Pfad nicht finden.
Grüße
bastla
Bitte warten ..
Mitglied: OOmatrixOO
28.07.2014, aktualisiert um 11:51 Uhr
Oh ja jetzt verstehe ich.

Es funktioniert, wenn die Ordnerstruktur wie folgt ist:
D:\Movies\Unterordner\Datei

aber sobald ein weiterer Unterordner vorhanden ist D:\Movies\Unterordner\Unterordner\Datei wird dieser dann nicht mit bearbeitet.
Man müsste also noch das Abfragen weiterer Unterordner mit einbinden.

Wäre es auch zusätzlich möglich, alle Aktionen in einer Log Datei zu speichern / dokumentieren?
Und gleich eine Frage hinterher. Kann man das Ganze noch auf weitere Dateiendungen anwenden? Also die Suche auf eine weitere Endung erweitern?

Mit freundlichen Grüßen und danke für deine Hilfe und Geduld bisher.


EDIT:
OK zum Loggen habe ich glaube ich was gefunden. Einfach >>D:\Movies\MP4\Logfile.log hinten anhängen.
Bitte warten ..
Mitglied: bastla
28.07.2014 um 12:44 Uhr
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
Move "%%i\Unter-Unterordnername\*.mp4" "D:\Movies\MP4\" 2>nul
- ansonsten eben mit einer weiteren Schleife oder doch per "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
Bitte warten ..
Mitglied: OOmatrixOO
28.07.2014, aktualisiert 31.07.2014
Hallo.
Die Unterordner können verschiedene Namen haben. Sind nicht einheitlich. Gelöscht werden sollen die Ordner, aus denen die gesuchte Datei (mp4) verschoben wurde.
Das funktioniert ja auch schon perfekt. Was mir noch fehlt, ist die Abfrage der nächsten Ordnerebenen / Unterordner.

Habe gerade das probiert, aber ohne Erfolg:
@echo off 
For /D %%i in ('dir /s /b "D:\Movies\*"') do if /i "%%~nxi" neq "MP4" (Move "%%i\*.mp4" "D:\Movies\MP4" 2>nul && rd /s /q "%%i") >> D:\Movies\MP4\Logfile.log 
pause 
Und wie beziehe ich eine weitere Endung mit ein? Als Beispiel .avi

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
28.07.2014 um 13:16 Uhr
Hallo OOmatrixOO!

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
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
Bitte warten ..
Mitglied: OOmatrixOO
29.07.2014, aktualisiert 31.07.2014
Hallo.
Ich habe es jetzt so:
@echo off 
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 
For /D %%i in ("D:\Movies\*") do if /i "%%~nxi" neq "MP4" (Move "%%i\*.mp4" "D:\Movies\MP4" 2>nul && rd /s /q "%%i") >> D:\Movies\MP4\Logfile.log 2>>&1 
pause
So werden mir alle Dateien verschoben. Auch die im Unter-Unterordner. Ich hoffe, ich habe das so richtig gemacht. Denn lasse ich die 2. For Zeile weg, werden nur die Dateien im Unter-Unterordner verschoben, aber Dateien,die in einem 1. Unterordner liegen nicht.

Kleiner Schönheitsfehler:
Wird eine Datei aus einem Unter-Unterordner verschoben, wird auch der Unter-Unterordner gelöscht, aber nicht der Unterordner.
Ich denke aber, damit kann ich leben.
Bitte warten ..
Mitglied: bastla
29.07.2014 um 16:13 Uhr
Hallo OOmatrixOO!
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"
Das "echo" ist natürlich wieder zum Testen drin ...

Grüße
bastla
Bitte warten ..
Mitglied: OOmatrixOO
30.07.2014, aktualisiert 31.07.2014
Wow super. So funktioniert es wie ich es haben möchte.

Eins hätte ich noch
Kann ich mir auch loggen lassen, welche Ordner gelöscht werden?

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" >>D:\Movies\MP4\Logfile.log
schreibt mir leider keine Daten der gelöschten Ordner ins File. Das wäre das einzige was mich noch interessieren würde. Falls dies nicht geht, wäre es auch nicht weiter tragisch.

Ich danke dir für deine super Unterstützung.
Mit freundlichen Grüßen
Bitte warten ..
Mitglied: bastla
LÖSUNG 30.07.2014, aktualisiert 02.08.2014
Hallo OOmatrixOO!

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)
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
Bitte warten ..
Mitglied: OOmatrixOO
31.07.2014, aktualisiert 01.08.2014
Hallo.
Bisher klappt alles super. Dank deiner Hilfe.
Danke auch für den Tip mit den Formatierungen hier im Forum. Habe mal den Thread angepasst.

Mit freundlichen Grüßen
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...