Datein via Batch/CMD in Monants-Ordner sortieren?

3 Antworten

schon fast trivial:

@echo off
setlocal enabledelayedexpansion

for /f "tokens=*" %%a in ('dir /b "*.jpg" "*.png"') do (
echo %%~fa , %%~ta
set "filedate=%%~ta"
rem das  klappt so nur  mit  dem deutschen Datumsformat! andere  benötigen  eine  angepasste  Maske.
set "mmyyyy=!filedate:~3,7!"
set "yyyy=!mmyyyy:~-4!"
rem ggf. Ordner erzeugen
if  not exist "sortiert\!yyyy!\!mmyyyy!" md "sortiert\!yyyy!\!mmyyyy!"

rem datei  in  neue sortirung  kopieren...
copy /b "%%~fa" "sortiert\!yyyy!\!mmyyyy!" 
rem um die  dateien zu verschieben entferne  "::" vor move und setze  diese  vor copy
rem move "%%~fa" "sortiert\!yyyy!\!mmyyyy!"
)
pause
exit /b 

Ich habe es geteste funktioniert.

Ich habe hier kopieren statt verschieben verwendet , du kannst auf deine Verantwortung den move-befehl aktivieren (rem entfernen) und stattdessen das rem vor copy schreiben. dann wird verschoben...

so was tut die Batch:

  • alle jpg und png im verzeichnis ermitteln.
  • das dateidatum abfragen
  • die das datum aufsplitten
  • gewünschte Ordner erzeugen
  • Datei dorthin kopieren/verschieben

Ich habe darauf verzichtet das auch in Unterverzeichnissen nach Dateien gesucht wird... frag nötigenfalls noch mal nach... ich kenne nicht die Strukturen auf deinem Rechner?

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Erzesel  10.04.2018, 19:46

PS: Ich vergaß zu erwähnen: die Batch_datei muss im gleichen Ordner wie die Bilder sein!
Eigentlich logisch aus dem Dir-Befehl ersichtlich....

0
IchFragHaltErst 
Fragesteller
 13.04.2018, 23:48

Vielen Dank! Funktioniert so weit ganz gut. Ich muss noch ein bisschen damit rumtesten um Dateinverlust aus zu schließen.

Eine Sache versehe ich nur nicht.

Statt den Jahresordnern erstellt er auch einen leeren Ordner mit dem Namen: ~3,7

Oh und beim testen mit VERSCHIEBEN habe ich festgestellt, dass viele nicht verschoben werden mit dem Vermerk: Pfad nicht gefunden

0
IchFragHaltErst 
Fragesteller
 13.04.2018, 23:52

Die häufgiste Fehlermeldung ist eigentlich: Angegebene Datei nicht gefunden. Sie sind aber alle im selben Ordner.

0
IchFragHaltErst 
Fragesteller
 14.04.2018, 00:48

Ok ich hab das Problem gefunden . . ein massives Problem, dass man vermutlich nur mit einer zusätlichen anderen Batch lösen kann.

Meine Datein enthalten im Titel wohl unerlaubte Symbole die das Screenshotprogramm bei manchen Webseitenscreenshots erstellt. Leider sind das tausende und ich will die Titel nicht ändern weil die Titel suchbare Begriffe enthalten.

Deine Lösung funktioniert also ideal . . mit normalen Datein. Ist nicht deine Schuld.

0
Erzesel  14.04.2018, 05:51
@IchFragHaltErst

dann gib einfach ein paar Beispiele, wie die Dateien heißen, und ich überlege wie das problem zu hanhaben ist ;)

0

IchFragHaltErst 
Fragesteller
 10.04.2018, 11:50

Auch hier keine Ahnung was es tut. Habe ein Testverzeichnis mit hunderten Testdatein. Nichts bewegt sich. Nichts wird erstellt oder sortiert. Ich hoffe ich habe jetzt nicht irgendwo irgendwelche Ordner. . .

So sah mein Text aus.

@ ECHO on

for /f "tokens=1,4* delims= " %%a in ('dir /od "C:\Users\XXXXX\TEST"') do (

   for /f "tokens=1,2,3 delims=." %%i in ('echo %%a') do (

      move "C:\Users\XXXXX\TEST\%%b%%c" "C:\%%k-%%j" /y

   )

)

pause

0
IchFragHaltErst 
Fragesteller
 10.04.2018, 12:06

Auch andere Lösungen sind nicht so ganz durchsichtig:

Diese hier sagt nur: Pfad nicht gefunden, erstellt aber schon die richtigen Ordner . . nur eben leer . .

@echo off & setlocal

Set "QuellDirFiles=C:\Users\XXXXX\TEST\*.*"

Set "ZielDirRoot=C:\Users\XXXXX\TEST\Sortiert\"

for %%i in (%QuellDirFiles%) do for /f "tokens=2-3 delims=. " %%a in ("%%~ti") do (

        if not exist "%ZielDirRoot%\%%b\%%a" md "%ZielDirRoot%\%%b\%%a"

        move "%%~fi" "%ZielDirRoot%\%b\%a\*.*"

)

pause

0