Hallo Gerd,
danke für das Script. Aber ... es gibt einiges zu verbessern ...
1. Der Klick auf "Abbrechen" beendet die Ausführung nicht. Die Ordner werden gleichwohl erzeugt.
Korrekt wäre "Abbruch". Aber weil man nicht sicher sein kann, dass der Anwender mit einer deutschen
Mac-OS-Umgebung unterwegs ist, muss dieser Button in den Test aufgenommen werden.
2. Bei den zwei ersten 'try'-Wickeln fehlt der 'on error'-Teil. Beim Präfix-Dialog ist das 'try' überflüssig.
Und was sollen die Endlos-Repeat-Schleifen bezwecken?
3. Es fehlt ein Test, welcher prüft, ob die Anzahl Gesamtseiten eine Ganzzahl ist. Okay, hier greift der
'try'-Wickel. Aber bei einer falschen Eingabe läuft das Script weiter bis der nächste Dialog nicht gezeigt
werden kann, weil die Variable 'anz' nicht definiert ist.
4. Die grossen 'giving-up-after'-Werte von 350 sorgen dafür, dass die Dialoge nach 350 Sekunden
geschlossen werden. Falls der Anwender einen Ordner auf das Droplet zieht und dann ein langes
Telefonat startet, ohne sich um die Dialoge zu kümmern, läuft das Script weiter und die Ordner werden
mit den Vorgabewerten erzeugt.
5. Bei einer ungeraden Angabe von "Seitenzahl" wird ein Ordner zuwenig erzeugt. Vielleicht sollten
nur gerade Zahlen akzeptiert werden.
6. Doppelpunkte im Namen müssen entdeckt und gemeldet werden. Sonst würden die Ordner nicht
erzeugt und der unbedarfte Anwender wüsste nicht warum. Ich würde sogar den Bruchstrich verbieten.
7. Die führenden Nullen werden viel zu umständlich erzeugt. Wenn die Anzahl Stellen immer gleich
sind, kann man den Wert "hard" im Script einsetzen. Wenn die Anzahl Stellen der Eingabe angepasst
werden soll, gibt es eine dynamische Lösung mit Variablen.
8. Der ganze 'on open'-Handler ist in einem einzigen tell-app-Finder-Block. Das sollte vermieden
werden, weil der Finder langsam ist. Wenn möglich nur Einzeilen-Befehle: 'tell app "Finder" to ...'
9. Wenn im Auftragsordner schon ein Ordner existiert, sollte der Anwender darauf aufmerksam gemacht
werden. Das obenstehende Script meldet nichts.
10. Der Button "OK" sollte zwei Grossbuchstaben aufweisen. "Ok" ist nicht korrekt.
11. Am Schluss fehlt eine Meldung, dass die Ausführung beendet ist.
Nachstehend meine Version. Auch hier gibt es Endlos-Schleifen, aber diese werden dazu benutzt, dem Anwender
eine Fehleingabe zu melden und dann – benutzerfreundlich – den Dialog erneut anzuzeigen. Die Schleife wird
verlassen, sobald die Eingabe korrekt ist.
Ein leeres Präfix wird durchgelassen. Kann sein, dass mal Ordner nur mit Ziffern benannt werden sollen.
---
on open droppedItems
set itemOne to (item 1 of droppedItems) as Unicode text
if itemOne ends with ":" then
set okay to false
repeat while okay is false
set pref to text returned of (display dialog ¬
"Bitte das Präfix für die Ordnernamen eingeben." default answer "Präfix" buttons ¬
{"1/2 | Weiter"} default button 1 with icon 1)
set okay to true
if pref contains ":" or pref contains "/" then
display dialog "Ordnernamen dürfen keinen Doppelpunkt enthalten (und Bruchstriche sollten vermieden werden)." buttons ¬
"OK" default button 1 with icon 2
set okay to false
end if
end repeat
set okay to false
repeat while okay is false
set anz to text returned of (display dialog ¬
"Bitte die Anzahl der Gesamtseiten eingeben." default answer "100" buttons ¬
{"2/2 | Weiter"} default button 1 with icon 1)
set okay to true
if anz is not "" then
set nDigits to count of anz
if nDigits is greater than 4 then
display dialog "Maximale Seitenzahl ist 9999." buttons "OK" default button 1 with icon 2
set okay to false
else
repeat with i from 1 to nDigits
if character i of anz is not in "0123456789" then
display dialog "Nur ganze Zahlen." buttons "OK" default button 1 with icon 2
set okay to false
exit repeat
end if
end repeat
end if
if okay then
set anz to anz as integer
if anz mod 2 is not 0 then set anz to anz + 1
end if
else
display dialog "Die Eingabe für »Seitenzahl« ist leer." buttons "OK" default button 1 with icon 2
set okay to false
end if
end repeat
set bestat to button returned of (display dialog ¬
"Bereit zum Anlegen von " & ((anz / 2) as integer) & " Seiten-Ordnern im Auftragsordner »" & itemOne & "«?" buttons ¬
{"Abbruch", "OK"} default button 2 with icon 1)
if bestat is "OK" then
repeat with i from 2 to anz by 2
set newName to pref & text -4 thru -1 of ("000" & i)
try
tell application "Finder" to make new folder at folder itemOne with properties {name:newName}
on error
display dialog "Der Ordner " & newName & " existiert schon." buttons "OK" default button 1 with icon 0
error number -128
end try
end repeat
else
error number -128
end if
end if
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end open
on run
display dialog "Dieses Programm legt Seiten-Unterordner in einem Auftragsordner an. Einfach den Ordner, in dem die Ordner erzeugt werden sollen, auf das Icon dieses Droplets ziehen..." buttons "OK" default button 1 with icon 1
end run
---
Die obere Limite von 9999 habe ich eingebaut. Deinen Schluss-Satz verstehe ich leider nicht. Vielleicht
kannst Du genauere Angaben machen, was das Script tun sollte.
Gruss, Hans
als Antwort auf: [#420399]