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 Dec 03, 2009 um 17:12:14 Uhr
Moin Traveller,

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

Grüße Biber

Content-Key: 130860

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

Printed on: April 18, 2024 at 22:04 o'clock

Member: Snowman25
Snowman25 Dec 03, 2009 at 11:26:23 (UTC)
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
Member: Traveller
Traveller Dec 03, 2009 at 11:51:56 (UTC)
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?
Member: Snowman25
Snowman25 Dec 03, 2009 at 11:58:46 (UTC)
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
Member: Traveller
Traveller Dec 03, 2009 at 12:04:14 (UTC)
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!
Member: Snowman25
Snowman25 Dec 03, 2009 at 12:23:36 (UTC)
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
Member: Traveller
Traveller Dec 03, 2009 at 12:39:50 (UTC)
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!
Member: Snowman25
Snowman25 Dec 03, 2009 at 13:00:12 (UTC)
Goto Top
Kein Problem, danke und dir auch face-smile
Heb dir die Dateien auf, willst ja wahrscheinlich öfter bilder sortieren
Member: Traveller
Traveller Apr 29, 2012 at 17:50:42 (UTC)
Goto Top
Übrigens:
ich nutze diese beiden Teile immer noch.

Also nochmals vielen Dank!!
Mitglied: 107785
107785 Jul 31, 2012 at 21:01:11 (UTC)
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\".
Member: bastla
bastla Jul 31, 2012 at 22:43:39 (UTC)
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
Member: bastla
bastla Jul 31, 2012, updated at Aug 01, 2012 at 09:08:47 (UTC)
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
Member: T22WBD
T22WBD Jun 21, 2019 at 10:49:26 (UTC)
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ß
Member: bastla
bastla Jun 21, 2019 at 11:03:47 (UTC)
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
Member: T22WBD
T22WBD Jun 21, 2019 at 11:22:00 (UTC)
Goto Top
Die Lösung war zu einfach face-wink

Danke und schönes Wochenende