Hallo, ich suche folgende Lösung: ein Ordner soll überwacht werden. Sobald dort eine Datei abgelegt wird, soll diese zu ihrem Namen einen Zusatz bekommen; aber kein Suffix. Ist das über AppleScript möglich, wenn ja wie?
okay, haben wir gleich. Ein Ordneraktions-Script, welches sich um hinzugefügte Dateien kümmern soll, beginnt immer mit... ... wobei man anstelle von 'thisFolder' auch eine ander Bezeichnung setzen kann.
Damit die neu hinzugefügten Dateien von den schon vorhandenen unterschieden werden können, muss in der ersten Zeile der Zusatz 'after receiving itemList' angehängt werden. Auch hier kann der Name der Variablen anders lauten.
Diese Variable enthält eine Liste der Dateien, welche in den Ordner gelegt werden. Und zwar sind es Pfade im Alias-Format, z.B. "alias "Macintosh HD:Desktop Folder:InFolder:Dateiname".
Im Script werden die Variablen 'ctr' und 'addOn' definiert. Die Zählervariable, um eventuelle Probleme melden zu können und die zweite enthält den Zusatz.
In einer Repeat-Schleife wird die Alias-Liste abgearbeitet. Diese Aliasse müssen in Strings verwandelt werden ('set fullPath to (aFile as string)'), damit man den Pfad zur Datei und den Namen der Datei ausziehen kann. Zuerst wird noch festgestellt, ob der Pfad mit einem Doppelpunkt endet. Dann wäre das Objekt ein Ordner und wird ignoriert.
Anschliessend werden die 'text item delimiters' als Doppelpunkt definiert. Damit kann der Pfad in die einzelnen Elemente aufgegliedert werden. Mit 'set filePath to text items 1 thru -2 of fullPath' wird der Pfad bis und mit "Hotfolder" in die Variable 'filePath' gegeben. Und mit 'set oldName to text item -1 of fullPath' wird das letzte (= -1) Element der Kette, der Dateiname gespeichert.
Wenn zwei Zeichen angehängt werden sollen, dann muss dieser Name kürzer als 30 Zeichen sein. Dies wird mit 'if (count oldName) < 30' geprüft. Falls okay, wird der neue Name und der neue komplette Pfad zusammengesetzt.
Im 'try/on error'-Block wird mit 'newPath as alias' geprüft, ob eine Datei mit diesem Namen schon existiert. Wenn ja, wird die 'ctr'-Variable um eins erhöht und die alte Datei wird nicht umbenannt. Wenn noch keine Datei mit dem neuen Namen existiert, dann wird ein Fehler generiert und das Script sagt dem Finder, dass er die Datei umbenennen soll.
Am Schluss werden die 'text item delimiters' auf einen leeren String gesetzt. Wenn die Zählervariable 'ctr' grösser als Null ist, dann wird mit einem Dialog die Anzahl Probleme angezeigt. --- on adding folder items to thisFolder after receiving itemList set ctr to 0 set addOn to "_N" repeat with aFile in itemList set fullPath to (aFile as string) if fullPath ends with ":" then else set AppleScript's text item delimiters to {":"} set filePath to text items 1 thru -2 of fullPath set oldName to text item -1 of fullPath if (count oldName) < 30 then set newName to oldName & addOn set newPath to (filePath & newName) as string try newPath as alias set ctr to ctr + 1 on error tell application "Finder" to set name of file fullPath to newName end try else set ctr to ctr + 1 end if end if end repeat set AppleScript's text item delimiters to {""} if ctr > 0 then display dialog "Anzahl Probleme: " & ctr buttons "OK" default button 1 with icon 2 end if end adding folder items to --- Dieses Script als normales, kompiliertes Script in einen Ordner (nicht in jenen, in welchen die Dateien, die umbenannt werden sollen, gelegt werden) auf der Harddisk sichern.
Dann dem "Hotfolder" die Ordneraktion zuweisen: Die Control-Taste niederhalten, den Mauszeiger im Finder auf den geschlossenen In-Ordner richten und die Maustaste betätigen. Im sich öffnenden Kontext-Menü die Zeile "Aktion an Ordner anfügen..." auswählen. Darauf öffnet sich ein Dialogfenster, in welchem das Script ausgewählt werden muss.
Achtung: Damit das Ganze funktioniert, muss der In-Ordner geöffnet sein.
Hallo Hans, vielen Dank für die schnelle Hilfe. Das Script funktioniert tadellos. Ist es denn auch möglich einen Ordner auf einem Server-Volume (Helios) zu überwachen?
Eine kleine Verbesserung: statt die Länge des alten Dateinamens mit einem variablen Wert zu testen... ... kann die Anzahl Zeichen des Zusatzes miteinbezogen werden: Vorteil: wenn die Länge des Zusatzes ändert, muss man nicht daran denken, auch den Test zu ändern.
Je nach Aufgabe, kann es auch nützlich sein, einen Dialog einzubauen, welcher erlaubt, den Zusatz zu ändern, ohne das Script editieren zu müssen. Die Variable 'addOn' ist als 'property' definiert. Dadurch wird die letzte Einstellung wird gespeichert und wird bei erneutem Aufruf angezeigt. Achtung: ich habe bemerkt, dass diese Speicherung nicht funktioniert, wenn das Script im Skripteditoren geöffnet ist. --- property addOn : "_N"
on adding folder items to thisFolder after receiving itemList showConfig() set ctr to 0 repeat with aFile in itemList set fullPath to (aFile as string) if fullPath ends with ":" then else set AppleScript's text item delimiters to {":"} set filePath to text items 1 thru -2 of fullPath set oldName to text item -1 of fullPath if (count oldName) + (count addOn) < 32 then set newName to oldName & addOn set newPath to (filePath & newName) as string try newPath as alias set ctr to ctr + 1 on error tell application "Finder" to set name of file fullPath to newName end try else set ctr to ctr + 1 end if end if end repeat set AppleScript's text item delimiters to {""} if ctr > 0 then display dialog "Anzahl Probleme: " & ctr buttons "OK" default button 1 with icon 2 end if end adding folder items to
on showConfig() set dR to (display dialog "Der Zusatz lautet: |" & addOn & ¬ "|" buttons {"Abbruch", "Ändern", "OK"} default button 3) if button returned of dR = "Ändern" then modConfig() end showConfig
on modConfig() set addOn to text returned of (display dialog "Neuer Zusatz:" default answer addOn) showConfig() end modConfig --- Mit 'showConfig' wird der Dialog gezeigt. Der Zusatz steht zwischen zwei senkrechten Zeichen, damit eventuelle Leerräume auch sichtbar werden. Wenn der Anwender auf "Ändern" klickt, wird eine neuer Dialog gezeigt, in welchem er den Zusatz ändern kann. Auf "OK" wird nochmals der erste Dialog gezeigt, damit man die Möglichkeit hat, einen Irrtum zu korrigieren.
Natürlich macht das Anzeigen dieser Dialoge nur Sinn, wenn der Zusatz nicht fix ist.