Datein via Batch/CMD in Monants-Ordner sortieren?
Ich habe mehrere tausend täglich anwachsende .jpg und .png Files die ich gerne per batch/cmd automatisch in Monatsordner sortieren lassen möchte.
Es handelt sich um ein Nachrichtenarchiv und alle Datein sollten nach Erstellungsdatum in eine Ordnerstruktur wie diese sortiert werden:
2014
- Januar 2014
- Februar 2014
- usw
2015
- Januar 2015
- Februar 2015
- usw
Ich habe das zwar schon mal gefragt, aber die Lösungen haben nicht funktioniert.
(siehe meine Fragen)
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?
dann gib einfach ein paar Beispiele, wie die Dateien heißen, und ich überlege wie das problem zu hanhaben ist ;)
Die häufgiste Fehlermeldung ist eigentlich: Angegebene Datei nicht gefunden. Sie sind aber alle im selben Ordner.
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
PS: Ich vergaß zu erwähnen: die Batch_datei muss im gleichen Ordner wie die Bilder sein!
Eigentlich logisch aus dem Dir-Befehl ersichtlich....
könnte auch das sein,was du suchst
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
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
Versuchs doch mal damit:
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.