Hallo Willem,
nun, der Ordner "Archiv" (oder wie Du ihn immer benennen willst) muss bleiben. Dieser Ordner wird ganz zu Beginn automatisch erstellt, falls er nicht schon besteht. Aber anschliessend dürfen im Hotfolder keine neuen Ordner erzeugt werden. Sonst wird der Ablauf der Ordneraktion gestört. Deshalb werden die Hauptordner "Backen", "Kochen" usw. im Überordner "Archiv" erzeugt.
Ein zweites Problem ist das Übersetzen der Kennbuchstaben in Ordnernamen. Das Script kann dies nicht. Es ist nicht intelligent. Nur der Scriptentwickler (sollte es sein …).
Wenn alle vorkommenden Kürzel und deren Umsetzung bekannt sind, dann ist meines Erachtens eine 'if / else if'-Schleife am effizientesten. Die folgende Lösung beruht auf dieser Annahme. Wenn aber die Liste bei laufendem Script ergänzt werden sollte, dann könnte dies über einen Dialog vorgenommen werden. Wenn ein unbekanntes Objekt erfasst wird, dann zieht das Script die Kennbuchstaben aus, zeigt diese mit einem Dialog an und der Anwender tippt den Namen des Ordners ein. Dieser wird samt Kürzel registriert und ist beim nächsten Mal bekannt.
Neu – bei Deiner Aufgabenstellung – ist der erste Unterordner, z.B. "b31". Diese Information muss zusätzlich beschafft werden. Mal schauen …
---
on adding folder items to thisFolder after receiving fileList
-- den Pfad zum Archiv-Ordner zusammensetzen
set archiveFolder to ((thisFolder as string) & "Archiv:")
try
-- prüfen, ob der Ordner "Archiv" existiert ...
alias archiveFolder
on error
-- ... wenn nicht, dann erzeugen
tell application "Finder" to make new folder at folder thisFolder with properties {name:"Archiv"}
end try
-- den Namen der aktuellen Datei feststellen und daraus die Namen der Ordner ableiten
set AppleScript's text item delimiters to {":"}
repeat with aFile in fileList
set filePath to aFile as string
if filePath does not end with ":" then
set fileName to text item -1 of filePath
if character -4 of fileName = "." then
set fileName to text 1 thru -5 of fileName
end if
if fileName starts with "bas" then
set folName1 to "BackenSonderHeft"
set folName2 to text 1 thru 5 of fileName
set folName3 to fileName
else if fileName starts with "b" then
set folName1 to "Backen"
set folName2 to text 1 thru 3 of fileName
set folName3 to fileName
else if fileName starts with "ko" then
set folName1 to "Kochen"
set folName2 to text 1 thru 4 of fileName
set folName3 to fileName
else if fileName starts with "sh" then
set folName1 to "Sonderheft"
set folName2 to text 1 thru 5 of fileName
set folName3 to fileName
else
set folName1 to ""
end if
-- wenn der erste Ordnername nicht leer ist ...
if folName1 is not "" then
-- ... wird geprüft, ob die drei Ordner schon existieren, wenn nicht, wird ein fehlender erzeugt
set subFolder1 to archiveFolder & folName1
try
alias subFolder1
on error
tell application "Finder" to make new folder at folder archiveFolder with properties {name:folName1}
end try
set subFolder2 to subFolder1 & ":" & folName2
try
alias subFolder2
on error
tell application "Finder" to make new folder at folder subFolder1 with properties {name:folName2}
end try
set subFolder3 to subFolder2 & ":" & folName3
try
alias subFolder3
on error
tell application "Finder" to make new folder at folder subFolder2 with properties {name:folName3}
end try
-- die aktuelle Datei wird in den Zielordner verschoben
try
tell application "Finder" to move file aFile to folder subFolder3 with replacing
end try
end if
end if
end repeat
end adding folder items to
---
Das 'with replacing' überschreibt im Zielordner eine Datei, wenn eine gleichnamige in den Hotfolder gelegt wird. Ohne diesen Zusatz würde die Datei nicht verschoben. Die Erzeugung eines Ordners mit "_2" ergänzt wäre sehr aufwendig.
Wenn neue Kennbuchstaben auftauchen, dann muss zuerst im Script die 'if / else if'-Schleife entsprechend ergänzt werden.
Hans Haesler <
[email protected]>