traveller
Goto Top

Datum aus Datei auslesen, Ordner nach Dateidatum erstellen und Datei dorthin kopieren oder verschieben

Hallo!

Jeder kennt das Problem, dass man viele Bilder mit der Digitalkamera gemacht hat und die Bilder nun systematisch geordnet haben möchte.

Nun gibt es fast zu jeder Kamera eine entsprechende Software. Aber diese wiil nicht jeder installieren, weil sie meist eine abgespeckte Version enthält.

Ich möchte erreichen, dass ein Script das Erstellungsdatum einer Datei ausliest und die Datei dann in einen Ordner mit der Formatierung
yyyy_mm_dd (z.B. 2009_12_03) kopiert oder verschiebt. Sollte der Ordner noch nicht existieren, dann soll er angelegt werden.

Mit der erwähnten Kamerasoftware ist dies meist möglich. Aber nur deswegen die Software installieren, deren Rest ich nicht benötige?

Aber vielleicht kann mir jemand aus dem Forum helfen.

Vielen Dank!
Kommentar vom Moderator Biber am 03.12.2009 um 18:12:14 Uhr
Moin Traveller,

willkommen im Forum.
Danke für die vorbildlich saubere Frageformulierung/Problembeschreibung.

Grüße Biber

Content-ID: 130860

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

Ausgedruckt am: 20.11.2024 um 09:11 Uhr

Snowman25
Snowman25 03.12.2009 um 12:26:23 Uhr
Goto Top
@Echo off
set file=%1
set fdate=%~t1
set fday=%fdate:~0,2%
set fmonth=%fdate:~3,2%
set fyear=%fdate:~6,4%
set folname=%fyear%_%fmonth%_%fday%
:work
if exist %folname%\NUL (
	Echo Verschiebe Datei %file% nach %folname%
	move %file% "%folname%\"%file%  
) else (
	Echo Erstelle Verzeichnis %folname%
	md "%folname%"  
	goto work
)

Aus dem ordner ausführen, in dem die Bilder liegen
verschiebt eine Datei in einen ordner der nach dem letzten Änderungszeitpunkt benannt ist
Traveller
Traveller 03.12.2009 um 12:51:56 Uhr
Goto Top
Vielen Dank für den ersten Lösungsansatz.

Aber es klappt nicht.
Ich ahbe eine Datei namens kopieren.bat erstellt und in den Ordner mit den betreffenden Bildern kopiert.
Inhalt der kopieren.bat ist dieser Code:
@echo off
set file=%1
set fdate=%~t1
set fday=%fdate:~0,2%
set fmonth=%fdate:~3,2%
set fyear=%fdate:~6,4%
set folname=%fyear%_%fmonth%_%fday%
:work
if exist %folname%\NUL (
Echo Verschiebe Datei %file% nach %folname%
move %file% "%folname%\"%file%
) else (
Echo Erstelle Verzeichnis %folname%
md "%folname%"
goto work
)

Führe ich nun die Batch datei aus, dann geht sie endlos und ich kann nur mit strg+c abbrechen.
Dann lese ich im DOS-Fenster.
Erstelle Verzeichnis ~6,4_~3,2_~0,2
A subdirectory or file ~6,4_~3,2_~0,2 already exists.
Verschiebe Datei nach ~6,4_~3,2_~0,2
The system cannot find this file specified

Und dann rennt es wieder von neuem los, immer in dieser Folge.

Das Verzeichnis
~6,4_~3,2_~0,2
wurde erstellt. In diesem befindet sich aber keine Datei.

Gut, vielleicht ist das noch nicht der richtige Ansatz?
Snowman25
Snowman25 03.12.2009 um 12:58:46 Uhr
Goto Top
huch.. beim letzten Edit ist ein Satz flöten gegangen... du musst als aufrufparameter eine Datei angeben, die wird dann in den entsprechenden verschoben.
kopieren ist übrigens der falsche name... der bilder werden bloß verschoben
wenn du kurz warten kannst, kann ich dir auch 'n script anbieten, dass einen kompletten ordner durchkämmt face-wink
Traveller
Traveller 03.12.2009 um 13:04:14 Uhr
Goto Top
klar warte ich gerne!

Es ist ja so, dass ich die Bilder von der Flashkarte auf den Blechtrottel kopiere und dann sollen sie eben in die Struktur gebracht werden.
Wenn es dann geklappt hat, kann ich sie ja löschen.

Danke für deine tolle Hilfe!
Snowman25
Snowman25 03.12.2009 um 13:23:36 Uhr
Goto Top
du kannst sie genausogut erst von der Karte auf den PC schieben, einfach in i-ein verzeichnis, da steckst du dann die kopieren.bat dazu und schon hast du deine ordnung. hier jetzt die beiden dateien:
builder.bat:
@Echo off
for %%a in (*) do (
	if NOT "%%a"=="builder.bat" (  
		if NOT "%%a"=="worker.bat" (  
			Echo.
			Echo Verarbeite Datei %%a
			Echo.
			Echo ________________________________
			Echo.
			call worker.bat "%%a"  
		)
	)
)

worker.bat:
@Echo off
set file=%1
set fdate=%~t1
set fday=%fdate:~0,2%
set fmonth=%fdate:~3,2%
set fyear=%fdate:~6,4%
set folname=%fyear%_%fmonth%_%fday%
:work
if exist %folname%\NUL (
	Echo Verschiebe Datei %file% nach %folname%
	Echo ----
	move %file% "%folname%\"%file%   
) else (
	Echo Erstelle Verzeichnis %folname%
	Echo ----
	md "%folname%"  
	goto work
)

Updated Version, kopiert sich nicht selbst face-wink
Traveller
Traveller 03.12.2009 um 13:39:50 Uhr
Goto Top
Wow!

Cooles Teil!!!

Über 500 Bilder sind eben in ein paaur Sekunden richtig einsortiert worden!
Klasse!!!

Vielen Dank und noch eine schöne Adventszeit!
Snowman25
Snowman25 03.12.2009 um 14:00:12 Uhr
Goto Top
Kein Problem, danke und dir auch face-smile
Heb dir die Dateien auf, willst ja wahrscheinlich öfter bilder sortieren
Traveller
Traveller 29.04.2012 um 19:50:42 Uhr
Goto Top
Übrigens:
ich nutze diese beiden Teile immer noch.

Also nochmals vielen Dank!!
107785
107785 31.07.2012 um 23:01:11 Uhr
Goto Top
Zitat von @Snowman25:
du kannst sie genausogut erst von der Karte auf den PC schieben, einfach in i-ein verzeichnis, da steckst du dann die kopieren.bat
dazu und schon hast du deine ordnung. hier jetzt die beiden dateien:
builder.bat:
> @Echo off
> for %%a in (*) do (
> 	if NOT "%%a"=="builder.bat" (  
> 		if NOT "%%a"=="worker.bat" (  
> 			Echo.
> 			Echo Verarbeite Datei %%a
> 			Echo.
> 			Echo ________________________________
> 			Echo.
> 			call worker.bat "%%a"  
> 		)
> 	)
> )
> 

worker.bat:
@Echo off
> set file=%1
> set fdate=%~t1
> set fday=%fdate:~0,2%
> set fmonth=%fdate:~3,2%
> set fyear=%fdate:~6,4%
> set folname=%fyear%_%fmonth%_%fday%
> :work
> if exist %folname%\NUL (
> 	Echo Verschiebe Datei %file% nach %folname%
> 	Echo ----
> 	move %file% "%folname%\"%file%   
> ) else (
> 	Echo Erstelle Verzeichnis %folname%
> 	Echo ----
> 	md "%folname%"  
> 	goto work
> )

Updated Version, kopiert sich nicht selbst face-wink

besteht die möglichkeit die sortierten bilder / ordner in ein anderes verzeichnis zu verschieben!?

z.b. die bilder liegen im ordner "c:\1" sollen aber in den ordner "c:\1_archiv\".
bastla
bastla 01.08.2012 um 00:43:39 Uhr
Goto Top
Hallo c0by1985 und willkommen im Forum!

Du kannst den Pfad einfach jedem "%folname%" (also in den Zeilen 12 und 16 der "worker.bat") voranstellen ...

Grüße
bastla
bastla
bastla 01.08.2012 aktualisiert um 11:08:47 Uhr
Goto Top
... bzw, um das etwas übersichtlicher zu gestalten (nur ein Batch nötig):
@Echo off & setlocal
set "Quelle=C:\1\"  
set "Ziel=C:\1_archiv\"  

for %%a in ("%Quelle%*") do (  
    if NOT "%%~nxa"=="%~nx0" (  
        Echo Verarbeite Datei "%%a"  
        set "fdate=%%~ta"  
        setlocal enabledelayedexpansion
        set "fday=!fdate:~0,2!"  
        set "fmonth=!fdate:~3,2!"  
        set "fyear=!fdate:~6,4!"  
        set "folname=!fyear!_!fmonth!_!fday!"  
        md "%Ziel%!folname!" 2>nul  
        Echo Verschiebe Datei "%%a" nach "!folname!"  
        move "%%a" "%Ziel%!folname!\"  
        endlocal
    )
)
Bitte darauf achten, dass die Pfade in Zeile 2 und 3 mit "\" enden!

Um die ursprüngliche Funktionalität (Quelle und Ziel sind jeweils der aktuelle Ordner) einfach die Zeilen 2 und 3 weglassen bzw auf
set "Quelle="  
set "Ziel="  
ändern ...

Schließlich noch eine Drag & Drop-Variante mit vorgegebenem Ziel: Zeile 2 auf
if [%1] neq  set "Quelle=%~1\"
ändern - damit wird dann entweder ein übergebener Ordner oder der aktuelle Ordner als Quelle verwendet ...

Grüße
bastla
T22WBD
T22WBD 21.06.2019 um 12:49:26 Uhr
Goto Top
Hallo liebes Forum,

nachdem ich lange etwas rumgespielt und getestet habe, bin ich letztendlich doch auf die Suche gegangen, um ein passendes Script für mich zu finden.
Dieses von bastla ist schon Super. Jedoch möchte ich nur jpg verschieben.
Was muss ich dann im Script anpassen/ändern??

Danke und Gruß
bastla
bastla 21.06.2019 um 13:03:47 Uhr
Goto Top
Hallo T22WBD und willkommen im Forum!

Versuch es (mit Testdaten, weil von mir ungetestet face-wink) und folgender Zeile 5:
for %%a in ("%Quelle%*.jpg") do (

Grüße
bastla
T22WBD
T22WBD 21.06.2019 um 13:22:00 Uhr
Goto Top
Die Lösung war zu einfach face-wink

Danke und schönes Wochenende