liquidskys
Goto Top

Dateien verschiedener Unterordner nach Dateiendung in jeweilige Unter-Unterordner sortieren

Hallo,
ich möchte hunderte gemischte Ordner mit JPG und CR2 Dateien auseinandersortieren. Trotz der möglichen Beispiele im Forum komme ich diesmal nicht weiter.
Danke für die Hilfe!

Hallo,

ich habe zirka 47 000 Bilddateien in folgender Ordnerstruktur:

\\
100
-Datum1
--Schlagwort x
--Schlagwort y
-Datum2
--Schlagwort z
-Datum3
--Schlagwort a
--Schlagwort b
101
-Datum4
--Schlagwort
...
102


In den Ordnern mit den Schlagwörten als Ordnername befinden sich *.jpg und *.cr2 Dateien.
Ich möchte jetzt die *.cr2 Dateien in dem jeweiligen Schlagwortordner in einen Unterordner Namens CR2 kopieren.

Ich habe es mit 2 Batchdateien als Schleife versucht:
Batch1:
for /D /r %%F in (*.*) do call "E:\Foto Test\mymove.bat" "%%F"

Batch2:
REM @echo off
cd %1
if exist *.cr2 (
if not exist CR2 md CR2
move *.cr2 CR2
)


Leider kommt er immer wieder mit den Ordnernamen durcheinander und kopiert dann in einer einzigen Endlosschleife.

Über Hilfe würde ich mich sehr freuen.

Viele Dank!

Content-Key: 159340

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

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 25.01.2011 um 08:09:58 Uhr
Goto Top
Hallo Liquidskys und willkommen im Forum!

Schematisch (und weitgehend ungetestet) etwa so:
@echo off & setlocal
set "Basis=D:\"  
set "Typ=CR2"  

for /f "delims=" %%i in ('dir /s /b /ad "%Basis%"') do for /f "tokens=1-5 delims=\" %%a in ("%%~fi") do if "%%d" neq "" if "%%e"=="" (  
    echo Bearbeite "%%i"  
    if exist "%%~i\*.%Typ%" (  
        echo md "%%~i\%Typ%" 2>nul  
        echo move "%%~i\*.%Typ%" "%%~i\%Typ%\"  
    )
)
pause
Voraussetzung ist dabei, dass die Tiefe der Ordnerstruktur Deiner Darstellung entspricht (da ich vermute, dass es kein anderes Erkennungskriterium für die "Schlagwort"-Ordner gibt - ev wäre aber das Namensformat der Datumsordner noch als Anhaltspunkt zu verwenden). Für jede weitere Ordnerebene wäre der Teil
for /f "tokens=1-5 delims=\" %%a in ("%%~fi") do @if "%%d" neq "" if "%%e"=="" (
entsprechend "nachzuziehen" - wenn also der Basisordner nicht "D:\", sondern zB "D:\Archiv\Bilder" wäre, müsste dieser Teil
for /f "tokens=1-7 delims=\" %%a in ("%%~fi") do @if "%%f" neq "" if "%%g"=="" (
lauten.

Die beiden "echo" in den Zeilen 8 und 9 sollen dem gefahrlosen Testen dienen - erst, wenn diese "echo" entfernt werden, werden tatsächlich Ordner erstellt und Dateien verschoben. Dann ist vermutlich auch die (nur als Info gedachte) Zeile 6 entbehrlich.

Grüße
bastla
Mitglied: Liquidskys
Liquidskys 25.01.2011 um 22:06:33 Uhr
Goto Top
Hi bastla,

vielen Dank für die superschnelle Hilfe.

Die Vermutung mit der Ordnerstruktur war vollkommen richtig.
Der der Basisordner auch nicht root war habe ich auch noch den Anfang von der Schleife für die Ordnertiefe angepasst.

for /f "delims=" %%i in ('dir /s /b /ad "%Basis%"') do for /f "tokens=3-7 delims=\" %%a in ("%%~fi") do if "%%d" neq "" if "%%e"=="" (

Danach hat der Batch in MInuten erledigt, wofür ich mehree Abende gebraucht hätte.

Vielen Dank nochmal!
Liquidskys
Mitglied: bastla
bastla 25.01.2011 um 22:14:06 Uhr
Goto Top
Hallo Liquidskys!
Danach hat der Batch in MInuten erledigt, wofür ich mehree Abende gebraucht hätte.
Dafür sind Batches ja schließlich auch da. face-wink

Freut mich jedenfalls, dass es gepasst hat ... face-smile

Grüße
bastla