Kann AppleScript anzeigen, wann ein Skript zuletzt ausgeführt wurde?

Gibt es eine Möglichkeit für einen AppleScript-Befehl, die letzte Ausführung anzuzeigen? Ich habe einige Skripte, bei denen es nützlich wäre, einen Zeitstempel der letzten Ausführung für Protokollierungszwecke zu haben. Ich bin sehr grün im Scripting, alle Ideen sind willkommen.

Sie könnten in eine Protokolldatei schreiben - macscripter.net/viewtopic.php?id=24745
@Tetsujin Das ist eine ausgezeichnete Idee. Ich hatte auf eine Art Pop-up gehofft, aber ich werde sofort damit beginnen, es hinzuzufügen.
Alle Antworten unten sind eigentlich großartige Ideen. Ich werde ein wenig von jedem von ihnen verwenden, aber das mit dem System-Popup als Antwort markiert haben, weil es dem am nächsten kommt, was ich für möglich gehalten habe. Danke für all die Hilfe.

Antworten (3)

Abgesehen vom Speichern von Informationen in einer separaten Datei auf der Festplatte oder der Verwendung eines Befehlszeilenprogramms können sie auch als Wert von a propertyinnerhalb des Skripts gespeichert werden , vorzugsweise als Anwendung . IMO Das Speichern des Werts von a propertyinnerhalb des Skripts ist aus Codierungsaspekten am einfachsten, da der Wert jedoch zurückgesetzt wird, wenn der Code später geändert oder neu kompiliert wird, kann dies einen Nachteil bei der Verwendung dieser Methode darstellen. Es hängt nur von Ihren tatsächlichen Bedürfnissen ab. Das heißt, und um Ihnen eine weitere Option zur Auswahl zu geben:

Beispiel AppleScript -Code :

property lastRunTime : missing value
set lastRunTime to (current date) as string
display notification lastRunTime subtitle "This application was last run:"

Ich habe die drei Codezeilen als Anwendung namens Last Run Time gespeichert und beim Ausführen wurde die Benachrichtigung wie folgt angezeigt:

Geben Sie hier die Bildbeschreibung ein

Sie können auch den Befehldisplay dialog or verwenden, wenn Sie den Befehl nicht verwenden möchten .display alert display notification


Hinweis: Der Beispiel -AppleScript- Code ist genau das und verwendet keine Fehlerbehandlung und soll nur eine von vielen Möglichkeiten zum Ausführen einer Aufgabe zeigen. Es liegt immer in der Verantwortung des Benutzers, eine geeignete Fehlerbehandlung nach Bedarf/Wunsch hinzuzufügen/zu verwenden .

Ich muss zugeben, ich mag diese Lösung und ärgere mich, dass ich nicht daran gedacht habe. +1
Ich habe das tatsächlich als Lösung in Betracht gezogen. Ich habe mich jedoch für meine Lösung entschieden, weil sie alle Grundlagen abdeckt ... Anzeige der letzten Ausführung ... ob sie als eigenständige Anwendung oder aus dem Skript-Editor heraus gestartet wurde (auch nach der Neukompilierung). Außerdem muss bei Ihrer Lösung das Skript selbst ausgeführt werden, um den Wert der letzten Ausführung zu erhalten. Was ist, wenn jemand anderes das Skript auf einem gemeinsam genutzten Computer ausgeführt hat und herausfinden möchte, wann das Skript tatsächlich das letzte Mal ausgeführt wurde? Bei Ihrem Ansatz muss die Skriptdatei im Skripteditor geöffnet werden, um zu versuchen, diesen Wert abzurufen (falls dies möglich ist).
@ user3439894 Wenn Sie die Zeile "Benachrichtigung anzeigen" Ihres Skripts als dritte Zeile und nicht als zweite Zeile festlegen, wird das Problem "beim ersten Mal, wenn msng für fehlenden Wert angezeigt wird" behoben.
@wch1zpink, hast du gesagt. "Ich habe mich jedoch für meine Lösung entschieden, weil sie alle Grundlagen abdeckt ... Anzeige der letzten Ausführung ... ob sie als eigenständige Anwendung oder aus dem Skripteditor heraus gestartet wurde (auch nach der Neukompilierung). ", und genau aus diesem Grund habe ich gesagt Es hängt nur von Ihren tatsächlichen Bedürfnissen ab. (Hervorhebung hinzugefügt), da wir wirklich nicht wissen, was die wahren oder wirklichen Bedürfnisse des OP in diesem speziellen Fall sind. Alle bisher erwähnten Verfahren haben ihre praktischen Anwendungen und Verwendungen und können unter bestimmten gegebenen Umständen eine akzeptable Lösung sein oder auch nicht. Es kommt nur auf die wirklichen Bedürfnisse an.
@wch1zpink, bevor ich gepostet und nur im Skripteditor geschrieben habe, hatte ich es so, wie ich es jetzt bearbeitet habe. Ich kann mich erinnern, warum ich mich entschieden habe, die letzten beiden Codezeilen beim ersten Posten zu ändern, aber es ist jetzt ein strittiger Punkt, da es bearbeitet wurde.

Stellen Sie sicher, dass Sie, wenn Sie den Wert von ändern , auch den Wert von im zweiten Skript set theFile to "/tmp/script_run_log.txt" -- value can be changedändern müssenset theLogFile to "Macintosh HD:private:tmp:script_run_log.txt"

-- PLACE THIS FOLLOWING CODE ANYWHERE IN A SCRIPT FILE
-- FOR NEATNESS, CONSIDER PLACING AT SCRIPT BOTTOM
-- THIS CODE WRITES TIME AND DATE OF LAST RUN OF THE SCRIPT OR APP
-- TO A SEPARATE FILE

writeToFile()
on writeToFile()
    set currentDate to (current date) as string
    set theFile to "/tmp/script_run_log.txt" -- value can be changed
    set myName to name of (info for (path to me))
    set theText to myName & " was last run on " & currentDate
    try
        set writeToFile to open for access theFile with write permission
        write theText & linefeed to writeToFile as text starting at eof
        close access theFile
    on error errMsg number errNum
        close access theFile
        set writeToFile to open for access theFile with write permission
        write theText & linefeed to writeToFile starting at eof
        close access theFile
    end try
end writeToFile

Speichern Sie den folgenden Code als Anwendung. Jedes Mal, wenn Sie die Protokolldatei nach der letzten Ausführung eines bestimmten Skripts überprüfen möchten, starten Sie einfach diese App

set theLogFile to "Macintosh HD:private:tmp:script_run_log.txt"
set lastParagraph to paragraphs of (read alias theLogFile) as list

display alert ¬
    theLogFile message item -2 of lastParagraph ¬
    buttons ¬
    "OK" default button ¬
    "OK" giving up after 15

Geben Sie hier die Bildbeschreibung ein

Sie können die Zeit abrufen, zu der zuletzt auf eine Datei zugegriffen wurde, indem Sie das Befehlszeilentool statmit den folgenden Argumenten verwenden:

    stat -f "%Sa" -t '%Y-%m-%d %H:%M:%S' /path/to/file
  • -f "%Sa": Hiermit werden nur die Dateizugriffsdaten abgefragt, da statauch andere Daten bereitgestellt werden können, z. B. Änderungszeiten, Erstellungszeiten, Geräteinformationen, Eigentums- und Berechtigungsdaten usw. Sehen Sie, man statwenn Sie mehr über die anderen Funktionen von erfahren möchten stat.

  • -t "%Y-%m-%d %H:%M:%S": Dies gibt an stat, in welchem ​​​​Format das Datum und die Uhrzeit ausgegeben werden sollen. Sie können dies an Ihre Bedürfnisse anpassen, aber für die Zwecke dieser Antwort habe ich ein standardisiertes Format ausgewählt, das dies für eines meiner AppleScripts ausgibt: 2018-03-31 16:55:42.

Denken Sie daran, dass die Zugriffszeit für eine AppleScript-Datei nicht nur aktualisiert wird, wenn sie ausgeführt wird, sondern auch, wenn sie gelesen, kopiert oder verschoben wird.

Um dies in einem AppleScript zu verwenden, können Sie es in Folgendes einschließen do shell script:

    do shell script "stat -f '%Sa' -t '%Y-%m-%d %H:%M:%S' " & ¬
        quoted form of POSIX path of theFileAlias
Das ist perfekt! Eine Frage: Ich habe den Befehl zum Ausführen im Terminal erhalten, indem ich zuerst in das Verzeichnis gewechselt habe, aber ich kann nicht mit einem direkten Pfad ausführen, da ein Ordner ein Leerzeichen enthält. Ich habe versucht, ein \ vor das Leerzeichen im Pfad zu setzen, aber das scheint nicht zu funktionieren. Wie behandelt POSIX ein Leerzeichen?
Das ist, was quoted form ofhandhabt: Es umschließt den Pfad in Anführungszeichen, aber Sie müssen den vollständigen Pfad verwenden (dh /Users/%you%/path/to/fileund nicht ~/path/to/file). Aber wenn Sie das Eigentum zurückgeholt haben POSIX path of, sollte das in Ordnung sein.