Hallo Hans-Gerd,
also … da ist wieder einmal guter Rat teuer. Weil ich unmöglich Deine Umgebung nachstellen kann.
Einen Zeitpuffer könnte man mit dem 'delay'-Befehl einbauen. Mit folgendem Beispiel wird das Script um zwei Sekunden angehalten …
… ohne dass Rechenleistung verlorengeht. Ausgelöste Prozesse werden weitergeführt. Der Wert muss eine Ganzzahl sein. Bruchteile werden akzeptiert, aber nicht eingehalten. Der kleinste Wert ist also eine ganze Sekunde.
Zweiter Nachteil: Man muss ziemlich genau wissen, wie lange die Pause dauern soll. Ist man zu "grosszügig", dann dauert die Ausführung unnötig länger. Ist man zu knauserig, kann es ab und zu vorkommen, dass die Pause nicht ausreicht und das Problem somit nicht vermieden wird.
Eine andere Möglichkeit wäre, mit dem 'busy status' zu prüfen, ob eine Datei bereit ist. Aber erstens macht dies mit Photoshop keinen Sinn, da geöffnete Dateien ohne weiteres gelöscht werden können. Und zweitens soll die 'busy'-Methode nicht sehr zuverlässig sein.
Am besten versuchst Du es mal mit einem 'flag' (= Flagge), welcher auf Null gesetzt wird. Dessen Name wird wie bei einer normalen Variablen vergeben. Ich verwende dabei häufig 'okay'. Dann wird eine Repeat-Schleife solange ausgeführt ('repeat while okay is 0') wie der Wert von 'okay' Null ist. Innerhalb der Repeat-Schleife ist ein 'try wrapper', welcher als erste Zeile den zeitkritischen Befehl enthält. Die zweite Zeile ist das Setzen des 'flags' auf 1. Solange die erste Zeile einen Fehler verursacht, wird die zweite nicht ausgeführt, der Wert von 'okay' bleibt auf Null, die Repeat-Schleife wird nicht verlassen.
---
-- andere Befehle, eventuell auch
-- in einer Repeat-Schleife
set okay to 0
repeat while okay = 0
try
tell application "Finder" to move file aFile to … (usw. usf.)
set okay to 1
end try
end repeat
-- wenn nötig weitere Befehle
-- eventuelle 'end's von 'tell'- oder 'if'- oder 'repeat'-Zeilen
set ctr to 0
set okay to 0
repeat while okay = 0
try
tell application "Finder" to move file aFile … (usw. usf.)
set okay to 1
end try
set ctr to ctr + 1
if ctr > 20 then
display dialog "Problem mit der Datei
" & (aFile as string) buttons "OK" default button 1 with icon 2
exit repeat
end if
end repeat
---
Aber … wie legt man den Grenzwert für 'ctr' fest? Hier sind wir wieder bei der Problematik wie oben bei 'delay' erwähnt :-(.
Hans Haesler <hsa@ringier.ch>