Ziel-Ordner nach Datei- oder EXIF-Datum erstellen und Datei dorthin kopieren/bewegen

Aktuelle Version: 12.10 (06.10.2018)
Alles zum Thema Directory Opus
smatzy
Beiträge: 10
Registriert: 2. Mai 2018 14:12
Betriebssystem: Windows 10
Produkt: DOpus 12
Version DOpus: Pro

Ziel-Ordner nach Datei- oder EXIF-Datum erstellen und Datei dorthin kopieren/bewegen

Beitrag von smatzy » 2. Mai 2018 14:14

Hallo,

ich habe ein Problem ich möchte gerne das Datum aus Datei auslesen, Ordner nach Dateidatum erstellen und Datei dorthin kopieren oder verschieben ist das mit DOpus möglich ?

Druß Stefan

Benutzeravatar
tbone
Berater
Beiträge: 486
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

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

Beitrag von tbone » 2. Mai 2018 14:38

Ist möglich, ist auf jeden Fall über JScript/VBScript zu lösen und unter Umständen auch mit MSDOS-Buttons und den regulären DO-Codes.

Kommt drauf an ob sich das Datum in der Datei ständig ändert, ob Du das Datum auch anderswohin speichern könntest (Umgebungsvariable?) und welche Dateien kopiert werden sollen (inklusive wie Du diese selektieren willst/musst).

smatzy
Beiträge: 10
Registriert: 2. Mai 2018 14:12
Betriebssystem: Windows 10
Produkt: DOpus 12
Version DOpus: Pro

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

Beitrag von smatzy » 2. Mai 2018 15:45

Hallo,

wie kann ich das den umsetzen habe leider keine Ahnung vom Programmieren ?

Gruß Stefan

Benutzeravatar
tbone
Berater
Beiträge: 486
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

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

Beitrag von tbone » 2. Mai 2018 16:04

Das wird dann natürlich nicht einfacher. o)

Beantworte vll erstmal die Fragen oben, wo kommt das Datum her, wer schreibt es in die Datei, wie sieht die Datei genau aus und wie willst Du die Dateien festlegen, die später kopiert werden sollen.

smatzy
Beiträge: 10
Registriert: 2. Mai 2018 14:12
Betriebssystem: Windows 10
Produkt: DOpus 12
Version DOpus: Pro

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

Beitrag von smatzy » 3. Mai 2018 09:45

Hallo,

ich möchte gerne Bilddateien ( RAW ) von meine SD Karte auf meinen Rechner kopieren. Ich denke das, daß Erstellungsdatum der Dateien genommen wird und dann ein Verzeichnis erstellt würd und alle Dateien mit dem Selben Datum werden dann in das neu erstellte Verzeichnis kopiert.

Gruß Stefan

Benutzeravatar
tbone
Berater
Beiträge: 486
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

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

Beitrag von tbone » 3. Mai 2018 14:10

Ok, mit Fotos ist das nun wieder eine etwas andere Herangehensweise, da wird mit DO-internen Befehlen mehr möglich.

So ein DO-Befehl z.B. könnte schon helfen:
Rename FILEINFO PATTERN="*" TO="{destpath$}\{modified|D#YYYY-MM-dd}\{file$}"

Wenn das mit dem Scripten nicht so Deine Sache ist und das in Zukunft auch so bleiben soll o),
dann vll mal hier querlesen, diverse Ansätze und andere Tools werden erwähnt:
https://resource.dopus.com/t/copy-photo ... lders/4198
https://resource.dopus.com/t/combinatio ... cess/10318
https://resource.dopus.com/t/rename-hel ... -data/3603

smatzy
Beiträge: 10
Registriert: 2. Mai 2018 14:12
Betriebssystem: Windows 10
Produkt: DOpus 12
Version DOpus: Pro

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

Beitrag von smatzy » 4. Mai 2018 09:05

Hallo,

das hilft mir nicht weiter ich möchte die Datein nicht umbenennen ich möchte sie in verzeichnisse kopieren die dem Erstellungsdatum der Datei zugeordnet sind.

LG Stefan

Benutzeravatar
tbone
Berater
Beiträge: 486
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

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

Beitrag von tbone » 4. Mai 2018 09:28

Hast Du den Befehl mal ausprobiert?!

Benutzeravatar
Kundal
Moderator
Beiträge: 1328
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

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

Beitrag von Kundal » 5. Mai 2018 10:31

Hallo smatzy,
der RENAME-Befehl kann auch Dateien verschieben, ohne dabei den Dateinamen zu verändern. Genau das macht der Code, den tbone vorgestellt hat. Wenn du die Dateien nicht verschieben, sondern kopieren willst, wäre allerdings ein Scriptbefehl die beste Lösung. Dafür werden allerdings konkretere Angaben benötigt:
- soll kopiert oder verschoben werden?
- Wohin soll kopiert werden? Standard wäre wie in tbone's Beispiel von Quelle nach Ziel, es könnte aber auch ein spezieller Pfad wie D:\Bilder\[neuer Datumsordner] angegeben werden.
- Soll wirklich das Erstellt-Datum der Datei verwendet werden? Bei Bildern wird meist das EXIF-Aufnahmedatum bevorzugt.
- Sollen alle Dateien im Quellordner kopiert werden oder nur die markierten Dateien?
- Wenn der Pfad zum Herkunftsordner auf der SD-Karte immer gleich ist, ließe sich auch ein Schalter erstellen, der alle Dateien kopiert, ohne dass du vorher zum Herkunftsordner navigieren musst.

smatzy
Beiträge: 10
Registriert: 2. Mai 2018 14:12
Betriebssystem: Windows 10
Produkt: DOpus 12
Version DOpus: Pro

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

Beitrag von smatzy » 11. Mai 2018 08:42

Hallo,

vielen Dank für Eure Hilfe, ich habe den Befehl von tbone ausprobiert der läuft schon so wie ich mir es gedacht habe.
Natürlich währe es schön wenn man die EXIF Daten für die Bestimmung des Datumsordner benutzen könnte aber soweit ich weiß enthalten RAW-Datein die EXIF Daten nicht so wie es Windows ( DOpus )erwartet. Ich benutze zu 99 % RAW Bilddateien die ich erst im Nachgang in JPG-Datein umwandle. Möcht aber dir RAW-Datein als Original behalten.
Klar wäre kopieren besser als verschieben dann hätte ich immer noch ein Backup auf der SD-Karte im falle etwas schief geht beim kopieren ( verschieben )
Mir würde es reichen das ich Quelle und Ziel selber aussuche.
Es sollen immer alle Daten von der Quelle kopiert werden.

Vielen dank das Ihr mir so gut weiter helft

Gruß Stefan

Benutzeravatar
tbone
Berater
Beiträge: 486
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

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

Beitrag von tbone » 12. Mai 2018 08:40

smatzy hat geschrieben:
11. Mai 2018 08:42
ich habe den Befehl von tbone ausprobiert der läuft schon so wie ich mir es gedacht habe.
Läuft also so, wie Du Dir das gewünscht hast oder nicht? o)

DO kann mit den RAW-EXIF Daten auch ganz vernünftig umgehen und diese auch beim Verschieben verwenden. Wenn Du hauptsächlich von SD-Karte kopierst, dann ist das "Modified"-Datum identisch mit dem EXIF-DateTaken. Der Befehl den ich nannte, nimmt das "Modified"-Datum vom Dateisystem. Der Vorteil dabei, der Befehl geht auch mit anderen Dateitypen (die keine EXIF-Info haben). Wenn Du unbedingt das EXIF-Datum nehmen willst, weil Du Deine Dateien vll schon "angefasst" hast, dann ersetze "modified" mit "datetaken", also ca. so:

Code: Alles auswählen

Rename FILEINFO PATTERN="*" TO="{destpath$}\{datetaken|D#YYYY-MM-dd}\{file$}"

smatzy
Beiträge: 10
Registriert: 2. Mai 2018 14:12
Betriebssystem: Windows 10
Produkt: DOpus 12
Version DOpus: Pro

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

Beitrag von smatzy » 12. Mai 2018 20:47

Hallo,

DANKE DANKE das ist super genau was ich gesucht habe schade das es nicht als Kopie geht habe immer etwas angst beim move weil ich da schon schlechte Erfahrungen gemacht habe. Dacht nicht das DO mit RAW EXIF klar kommt. das Geld hat sich wie immer gelohnt. :D

Vielen Dank an Euch allen

Gruß Stefan

Benutzeravatar
tbone
Berater
Beiträge: 486
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

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

Beitrag von tbone » 13. Mai 2018 16:40

Hier ein DO Button in ScriptForm. Er macht das was der Rename-Befehl macht, nur dass er eben kopiert und nicht "bewegt". Probier mal aus, ich habe versucht die eine oder andere Fehlersitutation abzufangen. Das Script guckt erst alle selektierten Dateien durch um die zu erstellenden Folder zu ermitteln. Dann wird pro Ziel-Folder ein "Copy" abgesetzt, das kann dazu führen, dass im "Replace (ALL)" Fall, der Dialog sehr oft kommt und man öfter "Replace" bestätigen muss (immer pro Folder). Der Abort-Button in so einem Dialog, sollte aber alle Aktionen beenden, sodass man im Extremfall nicht in einer Dialoghölle endet.

JScript - Copy to "<dst>\{yyyy_mm_dd|datetaken|created}\<filename>":

Code: Alles auswählen

//https://haage-partner.de/forum/viewtopic.php?f=47&t=5172
var DATETIMEFOLDERFORMAT = "D#yyyy_MM_dd"; //"D#yyyy_MM_dd T#HH:mm:ss"

function OnClick(data){
	var version = "0.2";
	var selFiles = data.func.sourcetab.selected_files, dstTab = data.func.desttab;

	if (!dstTab) {
		DOpus.Output("E   No destination tab, aborting.", 1);
		return;
	}

	if (!selFiles.count) {
		DOpus.Output("E   No files selected, aborting.", 1);
		return;
	}

	DOpus.Output("Determine target folders..");
	var foldersAndFiles = {};
	for(var i=0;i<selFiles.count;i++){
		var doItem = selFiles(i), destFolderName = "";
		var meta = doItem.metadata, type="", typeTmp="";
		var out = "    Pushing ["+padLeft(i,5)+"] [" + padRight(doItem.name, 24)+"] ";
		if (destFolderName == "" && meta == "image" ) {
			var typeTmp = "";
			if (destFolderName == "") {
				typeTmp = "datetaken";
				var dateTaken = DOpus.Create().Date(meta.image.datetaken);
				destFolderName = dateTaken.Format(DATETIMEFOLDERFORMAT);
				if (dateTaken.Format("D#yyyy") == "1899") destFolderName = ""; //no valid date in exif/image
			}
			if (destFolderName == "") {
				typeTmp = "datedigitized";
				var dateDigitized = DOpus.Create().Date(meta.image.datedigitized);
				destFolderName = dateDigitized.Format(DATETIMEFOLDERFORMAT);
				if (dateDigitized.Format("D#yyyy") == "1899") destFolderName = ""; //no valid date in exif/image
			}
			type = "img," + typeTmp;
		}
		if (destFolderName == "") {
			type = "n/a,creation";
			destFolderName = doItem.create.Format(DATETIMEFOLDERFORMAT);
		}
		
		DOpus.Output(out+"into [" + destFolderName+"] type ["+type+"]..");
		if (!foldersAndFiles[destFolderName]) foldersAndFiles[destFolderName] = [];
		foldersAndFiles[destFolderName].push(doItem);
	}

	DOpus.Output("Copy files..");
	var filesTotal = 0;
	for(folder in foldersAndFiles) {
		var destPath = dstTab.path+'\\'+folder;
		DOpus.Output("    To: " + destPath);
		if (!DOpus.FSUtil.Exists(destPath)) data.func.command.RunCommand('CreateFolder "'+destPath+'"');
		
		if (!DOpus.FSUtil.Exists(destPath)) {
			DOpus.Output("E       Failed to create folder ["+destPath+"].", 1);
			continue;
		}

		var cmd = DOpus.Create().Command();
		for(var f=0;f<foldersAndFiles[folder].length;f++){
			var file = foldersAndFiles[folder][f];
			DOpus.Output("        File : " + file);
			cmd.AddFile(file);
		}

		filesTotal += cmd.files.count;
		DOpus.Output("        Files: " + cmd.files.count);
		var cmdLine = 'Copy TO "'+destPath+'"'; //DOpus.Output("Cmd: " + cmdLine);
		var result = cmd.RunCommand(cmdLine);
		//DOpus.Output("Result: " + result);
		if (result == 0) {
			DOpus.Output("I   User abort.");
			break;			
		}
	}
	
	DOpus.Output("Done. Processed ["+filesTotal+"] files.");
}

function padLeft(s,l,c) {
	s=s+""; c=c?c+"":" ";
	while (s.length<l) s=c+s;
	return s;
}
function padRight(s,l,c) {
	s=s+""; c=c?c+"":" ";
	while (s.length<l) s=s+c;
	return s;
}
DO-Button, ready to copy and paste:

Code: Alles auswählen

<?xml version="1.0"?>
<button backcol="none" display="both" textcol="none">
	<label>Copy to &lt;dst&gt;\{yyyy_mm_dd|datetaken|created}\&lt;filename&gt;</label>
	<icon1>#copy</icon1>
	<function type="script">
		<instruction>////////////////////////////////////////////////////////////////////////////////</instruction>
		<instruction>@script JScript</instruction>
		<instruction>//https://haage-partner.de/forum/viewtopic.php?f=47&amp;t=5172</instruction>
		<instruction>var DATETIMEFOLDERFORMAT = &quot;D#yyyy_MM_dd&quot;; //&quot;D#yyyy_MM_dd T#HH:mm:ss&quot;</instruction>
		<instruction />
		<instruction>function OnClick(data){</instruction>
		<instruction>	var version = &quot;0.2&quot;;</instruction>
		<instruction>	var selFiles = data.func.sourcetab.selected_files, dstTab = data.func.desttab;</instruction>
		<instruction />
		<instruction>	if (!dstTab) {</instruction>
		<instruction>		DOpus.Output(&quot;E   No destination tab, aborting.&quot;, 1);</instruction>
		<instruction>		return;</instruction>
		<instruction>	}</instruction>
		<instruction />
		<instruction>	if (!selFiles.count) {</instruction>
		<instruction>		DOpus.Output(&quot;E   No files selected, aborting.&quot;, 1);</instruction>
		<instruction>		return;</instruction>
		<instruction>	}</instruction>
		<instruction />
		<instruction>	DOpus.Output(&quot;Determine target folders..&quot;);</instruction>
		<instruction>	var foldersAndFiles = {};</instruction>
		<instruction>	for(var i=0;i&lt;selFiles.count;i++){</instruction>
		<instruction>		var doItem = selFiles(i), destFolderName = &quot;&quot;;</instruction>
		<instruction>		var meta = doItem.metadata, type=&quot;&quot;, typeTmp=&quot;&quot;;</instruction>
		<instruction>		var out = &quot;    Pushing [&quot;+padLeft(i,5)+&quot;] [&quot; + padRight(doItem.name, 24)+&quot;] &quot;;</instruction>
		<instruction>		if (destFolderName == &quot;&quot; &amp;&amp; meta == &quot;image&quot; ) {</instruction>
		<instruction>			var typeTmp = &quot;&quot;;</instruction>
		<instruction>			if (destFolderName == &quot;&quot;) {</instruction>
		<instruction>				typeTmp = &quot;datetaken&quot;;</instruction>
		<instruction>				var dateTaken = DOpus.Create().Date(meta.image.datetaken);</instruction>
		<instruction>				destFolderName = dateTaken.Format(DATETIMEFOLDERFORMAT);</instruction>
		<instruction>				if (dateTaken.Format(&quot;D#yyyy&quot;) == &quot;1899&quot;) destFolderName = &quot;&quot;; //no valid date in exif/image</instruction>
		<instruction>			}</instruction>
		<instruction>			if (destFolderName == &quot;&quot;) {</instruction>
		<instruction>				typeTmp = &quot;datedigitized&quot;;</instruction>
		<instruction>				var dateDigitized = DOpus.Create().Date(meta.image.datedigitized);</instruction>
		<instruction>				destFolderName = dateDigitized.Format(DATETIMEFOLDERFORMAT);</instruction>
		<instruction>				if (dateDigitized.Format(&quot;D#yyyy&quot;) == &quot;1899&quot;) destFolderName = &quot;&quot;; //no valid date in exif/image</instruction>
		<instruction>			}</instruction>
		<instruction>			type = &quot;img,&quot; + typeTmp;</instruction>
		<instruction>		}</instruction>
		<instruction>		if (destFolderName == &quot;&quot;) {</instruction>
		<instruction>			type = &quot;n/a,creation&quot;;</instruction>
		<instruction>			destFolderName = doItem.create.Format(DATETIMEFOLDERFORMAT);</instruction>
		<instruction>		}</instruction>
		<instruction>		</instruction>
		<instruction>		DOpus.Output(out+&quot;into [&quot; + destFolderName+&quot;] type [&quot;+type+&quot;]..&quot;);</instruction>
		<instruction>		if (!foldersAndFiles[destFolderName]) foldersAndFiles[destFolderName] = [];</instruction>
		<instruction>		foldersAndFiles[destFolderName].push(doItem);</instruction>
		<instruction>	}</instruction>
		<instruction />
		<instruction>	DOpus.Output(&quot;Copy files..&quot;);</instruction>
		<instruction>	var filesTotal = 0;</instruction>
		<instruction>	for(folder in foldersAndFiles) {</instruction>
		<instruction>		var destPath = dstTab.path+&apos;\\&apos;+folder;</instruction>
		<instruction>		DOpus.Output(&quot;    To: &quot; + destPath);</instruction>
		<instruction>		if (!DOpus.FSUtil.Exists(destPath)) data.func.command.RunCommand(&apos;CreateFolder &quot;&apos;+destPath+&apos;&quot;&apos;);</instruction>
		<instruction>		</instruction>
		<instruction>		if (!DOpus.FSUtil.Exists(destPath)) {</instruction>
		<instruction>			DOpus.Output(&quot;E       Failed to create folder [&quot;+destPath+&quot;].&quot;, 1);</instruction>
		<instruction>			continue;</instruction>
		<instruction>		}</instruction>
		<instruction />
		<instruction>		var cmd = DOpus.Create().Command();</instruction>
		<instruction>		for(var f=0;f&lt;foldersAndFiles[folder].length;f++){</instruction>
		<instruction>			var file = foldersAndFiles[folder][f];</instruction>
		<instruction>			DOpus.Output(&quot;        File : &quot; + file);</instruction>
		<instruction>			cmd.AddFile(file);</instruction>
		<instruction>		}</instruction>
		<instruction />
		<instruction>		filesTotal += cmd.files.count;</instruction>
		<instruction>		DOpus.Output(&quot;        Files: &quot; + cmd.files.count);</instruction>
		<instruction>		var cmdLine = &apos;Copy TO &quot;&apos;+destPath+&apos;&quot;&apos;; //DOpus.Output(&quot;Cmd: &quot; + cmdLine);</instruction>
		<instruction>		var result = cmd.RunCommand(cmdLine);</instruction>
		<instruction>		//DOpus.Output(&quot;Result: &quot; + result);</instruction>
		<instruction>		if (result == 0) {</instruction>
		<instruction>			DOpus.Output(&quot;I   User abort.&quot;);</instruction>
		<instruction>			break;			</instruction>
		<instruction>		}</instruction>
		<instruction>	}</instruction>
		<instruction>	</instruction>
		<instruction>	DOpus.Output(&quot;Done. Processed [&quot;+filesTotal+&quot;] files.&quot;);</instruction>
		<instruction>}</instruction>
		<instruction />
		<instruction>function padLeft(s,l,c) {</instruction>
		<instruction>	s=s+&quot;&quot;; c=c?c+&quot;&quot;:&quot; &quot;;</instruction>
		<instruction>	while (s.length&lt;l) s=c+s;</instruction>
		<instruction>	return s;</instruction>
		<instruction>}</instruction>
		<instruction>function padRight(s,l,c) {</instruction>
		<instruction>	s=s+&quot;&quot;; c=c?c+&quot;&quot;:&quot; &quot;;</instruction>
		<instruction>	while (s.length&lt;l) s=s+c;</instruction>
		<instruction>	return s;</instruction>
		<instruction>}</instruction>
	</function>
</button>

Benutzeravatar
tbone
Berater
Beiträge: 486
Registriert: 22. Nov 2014 21:16
Betriebssystem: 7*64
Produkt: aktuelle Beta-Version
Version DOpus: Pro

Re: Ziel-Ordner nach Datei- oder EXIF-Datum erstellen und Datei dorthin kopieren/bewegen

Beitrag von tbone » 13. Mai 2018 16:45

Nur zur Info, ich habe den Titel des Threads etwas konkretisiert, nicht wundern.. o)

smatzy
Beiträge: 10
Registriert: 2. Mai 2018 14:12
Betriebssystem: Windows 10
Produkt: DOpus 12
Version DOpus: Pro

Re: Ziel-Ordner nach Datei- oder EXIF-Datum erstellen und Datei dorthin kopieren/bewegen

Beitrag von smatzy » 14. Mai 2018 21:52

Hallo,

vielen Dank für das Script es Kopiert die RAW-Datein aber es macht es nicht richtig, es erzeugt bei mehreren Dateien die unterschiedliche Erstellungdaten haben nur ein Ordner und nimmt auch nicht die EXIF-Daten sondern das Datum der Datei habe ich da was falsch gemacht ?

Gruß Stefan

Antworten