Regel wenn Datum nicht erkannt

Falls ich den OP richtig verstanden habe:

  • Wenn das newest document date vorhanden ist, stelle es in “sortierbarer” Form vor den Namen
  • Sonst versuche dasselbe mit dem document date
  • Wenn es das auch nicht gibt, mach es mit dem addition date

Das heißt, man hat am Ende immer einen Namen der Form “yyyy-mm-dd blafasel”. Das Datum ist quasi das “beste mögliche”, also in absteigender Präferenz das neueste aus der Datei, irgendeins aus der Datei und das Hinzufügedatum.
Aber vielleicht habe ich den OP auch flasch verstanden. Warum es nun zu viel sein soll, das Script zu benutzen, verstehe ich leider auch nicht.
PS

Da hast Du den OP m.E. flasch verstanden (bzw. den Zusammenhang nicht gesehen). Mit “Name” meinte er in diesem Fall den Namen des Datensatzes nach dem Umbenennen in sortable newest document date&name. D.h. Er wollte erst eine Smart Rule den neuen Namen bestimmen lassen und für den Fall dass dieser neue Name kein Datum enthält (weil es eben kein newest document date gibt), das Hinzfügedatum verwenden. Sowas wie ein if … else in einer Smart Rule.

Ah ok. Dann macht das Skript bereits was gewünscht ist.

Die Jungs haben die Arbeit schon erledigt :wink: weißt du, wie du das in eine intelligente Regel einbindest?

Sorry für die Späte Rückmeldung. War ne weile off.
Genauso sollte es sein. Name erstmal egal. Datum wenn nicht aus dem Dokument dann das neuste das mir zur Verfügung steht. Also am besten das Hinzufügedatum. Hatte nicht raus gelesen ob das Script nun schon funktioniert.

Das mit dem Einbinden habe ich noch nie probiert. Gibt es da nen Wiki für? Arbeite mich gern etwas ein.

Ob es ein Wiki gibt, kann ich dir nicht sagen. Aber ein Skript bettest du in eine intelligente Regel ein, indem du als Aktion Skript ausführen > Eingebettet > Skript bearbeiten wählst. Sobald du auf “Skript bearbeiten” tippst, öffnet sich ein Fenster. Das darin enthaltene Basisskript

on performSmartRule(theRecords)
	tell application id "DNtp"
		repeat with theRecord in theRecords
		end repeat
	end tell
end performSmartRule

überschreibst du einfach mit dem Skript, das Pete zur Verfügung gestellt hat. Auf welche Dokumente das Skript angewandt wird bestimmst du mit den Bedingungen der intelligenten Regel.

Wie immer gilt: erst ein paar mal ausprobieren, idealerweise mit eher engen Bedingungen; so kannst du frühzeitig feststellen, ob das Skript das macht, was du willst. Die durch das Skript vorgenommenen Änderungen lassen sich nur manuell rückgängig machen. Sei dir vor allem sicher, dass du das Skript nur auf die Inbox, und z.B. nur nach Import einer Datei anwendest; es ist keine Sicherheit in das Skript eingebaut, d.h. lässt du das Skript mehrfach laufen, so wird der Dateiname jedes mal wieder um ein Datum ergänzt (du kannst dir also vorstellen, was passiert, wenn du anstatt “Inbox” und “Datei ist PDF” “Datenbanken” und “alle Dokumentenarten” wählst, und dein Skript laufen lässt… @pete31 @chrillek mit set thisCheck to texts 1 thru 10 of theName könnte man die ersten 10 Zeichen des Dateinamens erfassen - wie könnte man dann am einfachsten prüfen, ob es sich dabei um ein (vorab durch Petes Skript vorgehängtes) Datum handelt, um eine entsprechende dann lass die Datei in Ruhe-Schleife einzubauen?

1 Like

Und vorzugsweise mit Duplikaten von Dokumenten!

1 Like

Man könnte das in AppleScript mit einem regulären Ausdruck machen (man könnte es in AppleScript auch anders machen, aber darüber kann ich nicht nachdenken, ohne Kopfschmerzen und Ausschlag zu bekommen). @pete21 hat mal etwas über Reguläre Ausdrücke in ObjCAppleScript im Forum geschrieben, aber ich finde es gerade nicht wieder. Muss in einem Thread gewesen sein, den @rufus123 begonnen hatte.
Ergänzung:
hier
steht was dazu (und es ist auch kopfschmerzträchtig)
und hier ist der Post von @pete31, den ich meinte. Da muss man dann nur den regulären Ausdruck ein bisschen anpassen, etwa so

"\\d{4}-\\d\\d-\\d\\d"

Aka “vier Ziffern, Bindestrich, zwei Ziffern, Bindestrich, zwei Ziffern”. Unter der Annahme, dass Bindestrich der Trenner hier ist.

Das würde aber jede 4-stellige Zahl am Anfang des Namens erfassen, oder? Will sagen, es gäbe keine Prüfung, ob es sich tatsächlich um ein Datum handelt?

try
  set thisDate to my convertDate(thisCheck)
on error
  --do the rest of the script
end try

on convertDate(thisCheck)
	return date thisCheck
end convertDate

funktioniert; allerdings kann diese on-Schleife nicht eingebettet werden (bzw. bei DT 3,5 funktionierte das nicht)

Ich warte eh schon den ganzen Tag darauf, dass du das mit zwei Zeilen JS machst :smiley: hat sich die Lieferung mit den gemischten Klammern verspätet? :crazy_face:

@rerexx alles klar? :crazy_face:

Du hast hier 3 Ansätze erhalten, wie du in Petes Skript eine Sicherheitsschleife einbauen könntest, damit Dateinamen die bereits durch das Skript geändert worden sind keine erneute Änderung erfahren können. Wenn du Lust hast, dann ist das ein guter Ansatz um das Skript besser zu verstehen; wenn du versuchen magst, selbst eine solche Schleife einzubauen, kannst du gern das Ergebnis posten oder gezielt nach Hilfe fragen.

Nee, die züchte ich selbst.
Tatsächlich funktioniert JS nicht in smart rules. Sonst würde ich etwa

records.for each(r => {
  let name = r.name();
  if (!/^\d{4}-\d\d-\d\d/.test(name)) {
     ....
  }
})

vorschlagen. Im if dann die jeweiligen Daten auf ! undefined abfragen und gut ist.
Bzw gut wäre, könnte man in smart rules JS benutzen. Schon 'n bisschen schade, Hazel und Drafts zb verarbeiten gerade zu gerne Javascript.

1 Like

Damit hab ich jetzt nen Problem. Also die Umbenennung ist gelaufen aber kein Datu im Dateinamen…
Wie heißt den jetzt die Bedingung dazu? “enthält nicht Datum” gibt’s ja nicht…
Mir fehlt also der Einstieg in die Regel um das Script dann einbinden zu können.

Also die Datei wurde umbenannt, aber nicht umbenannt?

Die Datei wurde von der Regel “umbenennen” bearbeitet aber kein Datum erfasst. Somit also nicht umbenannt. Sorry.

Jetzt brauche ich also den Einstieg um das Script laufen zu lassen… oder wird das in die Regel bereits mit eingebunden?

Poste bitte ein Screenshot deiner Regel

siehe eröffnungspost

Da taucht das Script, mit dem Du angibst ein Problem zu haben, nicht auf. Wie man ein Script in eine Intelligente Regel einbindet, steht in der Dokumentation.

das hat mir gefehlt. also das script in diese regel einbinden…

Danke euch vielmals. Bisher funktioniert das Script einwandfrei, Ich werde einige Tage testen und mich sicher nach den Feiertagen wieder etwas tiefer mit der Materie befassen.