Dateiname mit Datum per Stapelverarbeitung ändern

Ich bin wahrscheinlich einer der wenigen der sich immer wieder über DEVONthink ärgert. Also eine EierlegendeWollMilchSau-Software ist es für mich nicht. Einfache Dinge sind oft kompliziert…

Es wurden viele hundert Dokumente eingescannt, die alle mit dem Datum beginnen. Zum Teil mit zweistelligen und zum Teil mit vierstelliger Jahreszahl. Also z.B.
210721_FirmaX_Rechnung
20210721_FirmaY_Rechung
20080303_FirmaZ_Angebot

Wie kann ich bei den Einträgen die mit sechsstelligem Datum beginnen eine 20 voranstellen? Auf dem Mac wusste ich einige Lösungen, aber in DEVONthink suche ich mir den Wolf. Selbst im Arbeitsbuch steht nichts zur Stapelverarbeitung.

Stapelverarbeitung geht mit intelligenten Regeln oder Script.

Die Aufgabe, die du vor dir hast, kann z.B. mit folgendem Skript erledigt werden:

tell application id "DNtp"
	set theRecords to selected records
	repeat with theRecord in theRecords
		set theOrig to name of theRecord
		set theName to texts 1 thru 8 of theOrig
		try
			set theTest to theName as integer
		on error
			set theName to "20" & theOrig
			set name of theRecord to theName
		end try
	end repeat
end tell

Quick’n’Dirty, d.h. ohne Fehlerroutine. Das Skript nimmt sich die ersten 8 Zeichen des Dateinamens. Wenn diese 8 Zeichen alle Zahlen sind, macht das Skript nichts. Ansonsten stellt es 20 vorn an. Vorsicht, das macht es auch wenn du eine Datei mit dem Namen “ich sollte aber nicht verändert werden” auswählst. Das Skript könnte natürlich auch dahingehend angepasst werden, dass es nur reagiert, wenn zumindest die ersten 6 Zeichen Ziffern sind…

Das Skript per cut&paste in Script Editor, in DT die Dateien auswählen, die du bearbeiten willst, und dann das Skript starten. ACHTUNG: Veränderungen können nicht rückgängig gemacht werden; probiere bitte zuerst mit einigen Testdateien, ob das Skript das tut, was du willst. Wenn du viele Veränderungen vornimmst, mach zuvor eine Kopie deiner Datenbankdatei. Diese Kopie kannst du wieder löschen, wenn das Ergebnis dem Entspricht was du willst.

Natürlich geht das Ganze auch komplexer: mit intelligenten Regeln, die das Skript dann nur auf bestimmte Dateien anwenden. Oder mit RegEx um die Zeichenfolge im Namen zu suchen. Oder oder oder…

und diese Version prüft, ob die ersten 6 Zeichen Ziffern sind; wenn ja, schaut es, ob die ersten 8 Zeichen Ziffern sind. Wenn nein, stellt es 20 vorn an. Sind die ersten 6 Zeichen keine Ziffern, dann tut es nichts.

Anwendung und Hinweise siehe oben.

tell application id "DNtp"
	set theRecords to selected records
	repeat with theRecord in theRecords
		set theOrig to name of theRecord
		set theName to texts 1 thru 6 of theOrig
		try
			set theTest to theName as integer
			set theName to texts 1 thru 8 of theOrig
			try
				set theTest to theName as integer
			on error
				set theName to "20" & theOrig
				set name of theRecord to theName
			end try
		end try
	end repeat
end tell

Oh, und willkommen im Forum :slight_smile: DT ist eine Eierlegendewollmilchsau - gerade weil du mit Scripten und intelligenten Regeln und Gruppen arbeiten kannst.

(PS: wenn die Dokumentnamen schon beim Import umbenannt werden sollen, kannst du das Skript in einer intelligenten Regel unterbringen. Dafür sind nur minimale Änderungen erforderlich.)

Danke für das Skript. Funktioniert perfekt und findet sogar Fehler, wenn man z.B. ein Digit vergessen hat wie bei 11112 für 12.11.2011

1 Like