• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Der Frühling ist auch in den eingesandten Fotos deutlich zu erkennen. Zeigt uns, wer Euer Favorit ist! hier geht es lang für Euer Voting --> Klick

AS läuft als Droplet aber hakt als Ordneraktion

Hifi

Schöner von Nordhausen
Registriert
10.06.04
Beiträge
320
Hallihallo. Ich kenne mich nicht sehr gut aus mit Applescript, habe aber vor langer Zeit eine Ordneraktion zusammengebastelt, die mir aus einem immergleichen Text und einer individuellen Dateinummer ein PDF umbenennt.

- der Text lautet z.B. "Arbeitsdatei_"
- die Dateinummer wird aus einer FileMaker-Anwendung via FileMaker-Script in die Zwischenablage kopiert (dort steht dann z.B. "4567")
- das PDF wird aus der FileMaker-Anwendung via FileMaker-Script in einen festgelegten Ordner exportiert (und trägt beim Export immer den gleichen Namen)
- die umbenannte Datei soll dann in einen anderen Ordner verschoben werden (z.B. nach "Arbeitsdateien")

Bisher hat das gut funktioniert, seit meinem Wechsel von 10.4.11 Tiger zu 10.5.8 Leopard hakt es schon mal in der Form, dass dieses miniwinzigkleine Script manchmal sehr lange braucht, manchmal sehr schnell geht und manchmal gar nicht geht.

Das Script habe ich testweise auch mal als Droplet geschrieben und gespeichert, da liefert es zuverlässig und wiederholbar das gewünschte Ergebnis. Liegt das an Leopard oder an meinem Script?


----------------------------------------------
on adding folder items to this_folder after receiving added_items
-- im Droplet steht in der ersten Zeile stattdessen "on open added_items"

try
set theCount to number of items in added_items
repeat with i from 1 to theCount
set curItem to (item i of added_items)
set Dateinummer to the clipboard
tell application "Finder"
set name of curItem to "Arbeitsdatei_" & Dateinummer & ".pdf"
move curItem to "HD_Mac:Benutzer:Name:Dokumente:Arbeitsdateien:"
end tell

tell application "Preview" to open curItem

end repeat

tell application "Preview"
activate
end tell

end try

-- im Droplet steht in der letzten Zeile stattdessen "end open"
end adding folder items to
----------------------------------------------

P.S: Der angegebene Pfad endet im Script auf einen Doppelpunkt, hier in Apfeltalk steht davor noch ein Leerzeichen, ich weiss nicht warum. Und ich weiss auch leider nicht, wie ich das Script so hier hineinkopiere, dass die Farben und die Formattierung erhalten bleiben.
 

Hifi

Schöner von Nordhausen
Registriert
10.06.04
Beiträge
320
Hm, hat keiner einen Tipp? Hier noch mal das Problem in Kurzform:

- ein Filemaker-Script übergibt eine Zahl an die Zwischenablage und exportiert ein PDF in einen Ordner
- das Ordner-Script soll das PDF mit der Zahl aus der Zwischenablage umbenennen
- beim ersten Versuch klappts innerhalb von Sekundenbruchteilen, jeder weitere hakt (d.h. funktioniert mit extremer Verzögerung oder funktioniert gar nicht)
- hier das Script:

----------------------------------------------
on adding folder items to this_folder after receiving added_items

set theCount to number of items in added_items
repeat with i from 1 to theCount
set curItem to (item i of added_items)
set Dateinummer to the clipboard
tell application "Finder"
set name of curItem to "Arbeitsdatei_" & Dateinummer & ".pdf"
end tell
end repeat

end adding folder items to
----------------------------------------------

Bin für jeden Tipp dankbar!!
 

sedna

Schweizer Glockenapfel
Registriert
22.10.08
Beiträge
1.375
Hallo!

Ordneraktionen liefen schon in Tiger bei vielen Usern nicht immer zuverlässig. In Leopard wurden sie geändert (-> nicht mehr vom Finder gestartet), damit aber leider auch noch unzuverlässiger.

Besser ist es, das in 10.4 eingeführte launchd zu nehmen.
Hier mal eine Grundversion deines Skriptes, wie ich es schreiben würde:


set x to "Pfad:zum:überwachenden:Ordner:"
set y to "Pfad:zum:Zielordner:"
tell application "Finder"
set theFiles to every file of folder x
repeat with i in theFiles
set m to i as alias
--set the name of i to usw...
move m to folder y
end repeat
end tell


Das Skript speichern und als LaunchAgent laufen lassen
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>de.hifi.ftopdf</string>
    <key>Program</key>
    <string>/usr/bin/osascript</string>
    <key>ProgramArguments</key>
    <array>
        <string>osascript</string>
        <string>/Pfad/zum/gespeicherten/xyz.scpt</string>
    </array>
    <key>QueueDirectories</key>
    <array>
        <string>/Pfad/zum/überwachenden/Ordner</string>
    </array>
</dict>
</plist>

Kopieren, in TextEdit als reinen Text öffnen, Pfade anpassen und als .plist im Ordner (~)/Library/LaunchAgents speichern (im Beispiel unter den Namen "de.hifi.ftopdf.plist")
Im Terminal mit folgender Zeile aktivieren (oder aus- und einlocken)
Code:
launchctl load ~/Library/LaunchAgents/de.hifi.ftopdf.plist

QueueDirectories überwacht LEERE Ordner auf neue Dateien. Ansonsten WatchPaths nehmen, welches Änderungen überwacht.
Ich habe auf die Schnelle mal einen Link zu launchd gefunden ... da mag es bestimmt noch bessere geben: Hier

Falls du einen Plist-Editor installiert hast, so geht das Erstellen der Plist natürlich bequemer....

Gruß
 

Hifi

Schöner von Nordhausen
Registriert
10.06.04
Beiträge
320
Prima, Danke! Das PDF bekommt den gewünschten Namen und landet im vorgesehenen Zielordner. Dies geschieht zwar manchmal etwas verzögert, für das Ergebnis ist das aber nicht sonderlich schlimm.

Wenn ich allerdings in die Konsole schaue, frage ich mich schon was da los ist und ob ich mir Sorgen machen muss... Alle zehn Sekunden erscheint dort die Meldung "com.apple.launchd (Name_meines_LaunchAgent) Throttling respawn: Will start in 10 seconds" - und ich denke, das sind genau die zehn Sekunden Verzögerung, die manchmal bei der Skriptausführung auftreten.

Lässt es sich vermeiden, dass alle zehn Sekunden dieser Konsoleneintrag geschrieben wird und lässt es sich vielleicht sogar so einrichten, dass das Skript tatsächlich genau in dem Moment ausgeführt wird, in dem die Datei im Ordner landet?
 

sedna

Schweizer Glockenapfel
Registriert
22.10.08
Beiträge
1.375
Upps...
Du könntest QueueDirectories in WatchPaths ändern ... dann hättest du Ruhe.

Das eigentliche Problem ist, dass der zu überwachende Ordner nicht völlig leer ist. Da wird noch eine unsichtbare .DS_Store Datei drinnen sein. So wird der Agent alle 10 Sekunden gestartet, ohne dass er seine Aufgabe vollenden kann...

Um das zu fixen (und weiter mit QueueDirectories arbeiten zu können):
Nach set x to ...
set px to POSIX path of x

und am Ende des Blockes (z.B. direkt vor tell app "Preview"...)
do shell script "rm " & quoted form of (px & ".DS_Store")

oder wenn es innerhalb eines tell Blockes steht dann
tell me to do shell script "rm " & quoted form of (px & ".DS_Store")

Das löscht die unsichtbare .DS_Store Datei

Zur Verzögerung: Wenn man tröpfchenweise neue Dateien dem Ordner hinzugibt, wird sich ein kurzes delay (im längsten Fall eben 10 Sek) nicht vermeiden lassen.


Und noch zur Info: zum sofortigen Stop des Launch Agents:
Code:
[I]launchctl unload ~/Library/LaunchAgents/dein.name.der.plist[/I]


Gruß
 
Zuletzt bearbeitet:

Hifi

Schöner von Nordhausen
Registriert
10.06.04
Beiträge
320
Super, Danke! Hatte mir auch gedacht, dass es an der.DS-Datei liegen könnte, habe aber nun mit WatchPaths tatsächlich Ruhe. Und bei der Gelegenheit habe ich die Automatisierungen, für die ich früher mal zehn Ordner und zehn Ordneraktionen angelegt hatte, auf zwei Ordner, ein Script und einen LaunchAgent reduziert.

Aber es ergibt sich schon wieder ein neues Problem:

Wenn ich aus FileMaker das PDF exportiere (genauer: ich drucke es mit der Option "als PDF speichern unter"), dann bekommt es blitzschnell den gewünschten Namen, landet im richtigen Ordner - und es erscheint die Fehlermeldung: "(Dateiname.pdf) Die Datei konnte nicht geöffnet werden. Möglicherweise ist sie beschädigt oder hat ein Format, das Vorschau nicht erkennt." Die Datei ist aber völlig in Ordnung und lässt sich manuell ganz normal mit Vorschau öffnen. -> So lange Vorschau noch gar nicht gestartet ist (also beim ersten PDF-Export), kommt keine Fehlermeldung, dann ist alles i.O.!

Mit meinen Laienkenntnissen würde ich vielleicht irgendwie was hinbekommen, dass das Script noch ein wenig wartet, Luft holt, innerlich drei Mal "ho-ho-ho" ruft und dann erst Vorschau bittet, das PDF zu öffnen. Aber gibts dafür vielleicht einen geeigneteren Weg...?

Edit: Oh, da habe ich nicht aufgepasst, es lief noch ein vorheriger LaunchAgent. Es hakt und klemmt immer noch ein wenig und in der Konsole gibt es wieder eine Fehlermeldung ("Throttling respawn: Will start in 4 seconds" bzw. "Throttling respawn: Will start in 6 seconds"). Werde mir die Sache noch mal genauer anschauen...
 
Zuletzt bearbeitet:

sedna

Schweizer Glockenapfel
Registriert
22.10.08
Beiträge
1.375
Diese Meldungen sollten jetzt aber nicht mehr in regelmäßigen Abständen erscheinen ...
Z.B. jedoch, wenn der LaunchAgent aktiviert wird, das auszuführende Skript aber gerade läuft.

Zum Filemaker PDF Export kann ich nichts sagen, da ich das Programm nicht nutze..

Gruß
 

Hifi

Schöner von Nordhausen
Registriert
10.06.04
Beiträge
320
Hm..., habe alles noch mal beobachtet und festgestellt, dass es die folgenden vier Ergebnisse bzw. Situationen nach dem PDF-Export gibt:

1.
Im Finder erscheint die Fehlermeldung "Die Datei konnte nicht geöffnet werden. Möglicherweise (...)". Das PDF ist aber in Ordnung und lässt sich manuell öffnen.
-> Tritt auf, wenn "Vorschau" bereits vor dem PDF-Export geöffnet ist und längere Zeit kein PDF exportiert wurde.

2.
Das exportierte PDF wird wie gewünscht verarbeitet und in "Vorschau" geöffnet.
-> Tritt auf, wenn "Vorschau" vor dem PDF-Export noch nicht geöffnet ist und längere Zeit kein PDF exportiert wurde.

3.
Das exportierte PDF wird erst nach einiger Verzögerung von Ordner x zum Ordner y bewegt und in "Vorschau" geöffnet. In der Konsole erscheint in diesem Zusammenhang dann die Meldung "(...) com.apple.launchd[..] (Name_meines_LaunchAgent) Throttling respawn: Will start in (...) seconds".
-> Tritt auf, wenn "Vorschau" bereits vor dem PDF-Export geöffnet ist und bereits kurz zuvor ein PDF exportiert wurde.

4.
Das exportierte PDF wird erst nach einiger Verzögerung von Ordner x zum Ordner y bewegt und in "Vorschau" geöffnet. In der Konsole erscheint in diesem Zusammenhang dann die Meldung "(...) com.apple.launchd[..] (Name_meines_LaunchAgent) Throttling respawn: Will start in (...) seconds".
-> Tritt auf, wenn "Vorschau" vor dem PDF-Export nicht geöffnet ist, aber bereits kurz zuvor ein PDF exportiert wurde (Hier habe ich testweise nach einem PDF-Export "Vorschau" schnell beendet, um die Situation herbeizuführen.)

Das Script sieht jetzt folgendermaßen aus:

set x to "Pfad:zum:überwachenden:Ordner:"
set y to "Pfad:zum:Zielordner:"

tell application "Finder"
set theFiles to every file of folder x
set DateiName to the clipboard
repeat with i in theFiles
set m to i as alias
set name of i to DateiName & ".pdf"
move m to folder y
tell application "Preview" to open m
tell application "Preview" to activate
end repeat
end tell


P.S: Wie kann ich den Code so posten, dass er farbig (wie im Skripteditor) wiedergegeben wird?
 

Hifi

Schöner von Nordhausen
Registriert
10.06.04
Beiträge
320
(Edit)

Hm, habe im Script jetzt ein "delay 0.1" eingefügt, damit ist Situation 1 gelöst und bringt (abgesehen von der nicht wahrnehmbaren Verzögerung von 0,1 Sekunde) das gewünschte Ergebnis. Situation 2 bringt ohnehin das gewünschte Ergebnis, also weiter zu 3 und 4:

Laut launchd.plist(5)-Manual liegt der Wert für das "ThrottleInterval" standardmäßig bei 10 Sekunden - und lässt sich offenbar ohne weiteres auf Null setzen. Damit führen dann auch Situation 3 und 4 verzögerungsfrei zum gewünschten Ergebnis.

:)
 
Zuletzt bearbeitet:

sedna

Schweizer Glockenapfel
Registriert
22.10.08
Beiträge
1.375
Stimmt. Den kann man verändern.
Schön, dass es jetzt klappt :)
 

Hifi

Schöner von Nordhausen
Registriert
10.06.04
Beiträge
320
Ja, vielen Dank noch mal! Ohne Deine Tipps und Hilfestellungen hätte ich vermutlich nicht den Mut gehabt, da so weit einzusteigen.

:)