Hallo Crow,
hier, wie versprochen, eine erste Version. Den folgenden Code im Format "Programm"
speichern. Damit ergibt sich ein Droplet, welches ich Dir zustellen werde.
Zur Erinnerung: Damit das Ergebnis nicht verfälscht wird, musst Du daran denken,
bei
jeder Datei als erstes ein "Sichern-Unter" zu machen, damit das Erstellungsdatum
mit dem Beginn der verrichteten Arbeit übereinstimmt.
Das Benutzen des Droplets ist einfach. Den Ordner, welcher die zu erfassenden
Dateien enthält, auf das Icon des Droplets ziehen. Es können auch lose Dateien
oder mehrere Ordner sein.
Bei allerersten Ausführen erscheint ein Dialog, in welchem der Ordner ausgewählt
werden muss, in den die Logdatei geschrieben werden soll. Der Pfad zu diesem
Ordner wird gespeichert. Der Dialog erscheint erst wieder, wenn der Logdatei-Ordner
umbenannt oder veschoben wurde. Oder nach einem Kompilieren des Scripts.
Bei jeder Anwendung wird eine neue Logdatei erzeugt. Damit die schon bestehenden
nicht überschrieben werden, setzt das Script das Datum samt Uhrzeit in den Namen,
z.B. "Log_061111_102346.txt".
Von jeder Datei werden die Infos verlangt und daraus der Name, das Erstellungs-
und das Änderungsdatum gezogen. Aus den beiden Daten wird die Zeitdifferenz
errechnet und zusammen mit dem Namen in die Logdatei geschrieben.
Am Schluss wird noch das addierte Total angefügt.
Code -- die Variable 'logFolder' als 'property' definieren, damit der Pfad zum Logdatei-Ordner gespeichert wird property logFolder : "" -- zwei weitere Variablen als 'global' definieren, damit sie in den Handlern erkannt werden global logPath global tSecs on open allObjects -- den gespeicherten Pfad des Logdatei-Ordners prüfen try alias logFolder on error set logFolder to (choose folder with prompt "Bitte den Logdatei-Ordner wählen.") as Unicode text end try -- das akuelle Datum speichern set curDate to current date -- davon Jahr, Monat, Tag, Stunde, Minuten, Sekunden ausziehen und zusammensetzen set y to text -2 thru -1 of ((year of curDate) as string) set m to text -2 thru -1 of ((month of curDate as number) as string) set d to text -2 thru -1 of ((day of curDate) as string) set hh to text -2 thru -1 of ("0" & (hours of curDate)) set mm to text -2 thru -1 of ("0" & (minutes of curDate)) set ss to text -2 thru -1 of ("0" & (seconds of curDate)) set timeString to y & m & d & "_" & hh & mm & ss -- den Pfad zur Logdatei zusammensetzen set logPath to logFolder & "Log_" & timeString & ".txt" -- das Datum in eine Textkette verwandeln und ... set dateString to (curDate as string) & return -- ... als ersten Eintrag in die Logdatei schreiben writeLog(dateString) -- die Variable 'tSecs' initialisieren set tSecs to 0 -- Wiederholungsschleife, welche alle gedroppten Objekte zum Handler 'processObject' schickt repeat with aObject in allObjects processObject(aObject) end repeat -- das Total Sekunden ins Format "hh:mm:ss" umrechnen lassen set timeString to convToTime(tSecs) -- die aktuelle Textkette zusammensetzen set aString to (return & return & "Total" & tab & timeString) as string -- und zum Handler schicken, welcher damit die Logdatei ergänzt writeLog(aString) -- den Anwender informieren display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1 end open -- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist -- bei Ordnern wird eine Liste des Inhalts erstellt und die Elemente rekursiv behandelt -- (d.h. zum aktuellen Handler geschickt) -- Dateien werden zum Handler 'processFile' gesandt on processObject(aObject) -- wenn der Pfad mit einem Doppelpunkt endet, ist das Objekt ein Ordner -- die Liste dessen Inhalts wird erstellt (ohne unsichtbare Dateien) if (aObject as string) ends with ":" then set contentsList to list folder aObject without invisibles -- dies ist das rekursive Teil: die Wiederholschleife schickt alle Objekte zum Handler, -- in welchem sie sich selbst befindet repeat with anItem in contentsList set objPath to ((aObject as string) & anItem) processObject(objPath as alias) end repeat -- wenn das Objekt eine Datei ist, dann wird der Pfad dem Handler 'processFile' übergeben else set okay to processFile(aObject as string) end if end processObject -- in diesem Handler werden die Details zusammengetragen on processFile(aFile) -- die Infos der Datei werden gespeichert set fileInfo to (info for file aFile) -- der Name der Datei wird ausgezogen set fileName to name of fileInfo -- das Erstellungs- und das Änderungsdatum set creDate to creation date of fileInfo set modDate to modification date of fileInfo -- daraus die Sekunden errechnen set nSecs to modDate - creDate -- das Ergebnis zum Total addieren set tSecs to tSecs + nSecs -- zum Handler schicken, welcher die Sekunden in "hh:mm:ss" verwandelt set timeString to convToTime(nSecs) -- die aktuelle Textkette zusammensetzen set aString to (return & fileName & tab & timeString) as string -- und zum Handler schicken, welcher damit die Logdatei ergänzt writeLog(aString) end processFile on writeLog(aString) try open for access file logPath with write permission write aString to file logPath starting at eof close access file logPath on error try close access file logPath end try end try end writeLog on convToTime(nSecs) set hh to text -2 thru -1 of ("0" & (nSecs div 3600)) set restSecs to nSecs mod 3600 set mm to text -2 thru -1 of ("0" & (restSecs div 60)) set ss to text -2 thru -1 of ("0" & (restSecs mod 60)) return hh & ":" & mm & ":" & ss end convToTime Das andere Script wird etwas schwieriger zu realisieren sein ...
Gruss, Hans