[GastForen Programmierung/Entwicklung AppleScript

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Ordner für Frische Bananen

Hans Haesler
  
Beiträge gesamt: 5826

23. Jul 2014, 15:53
Bewertung:

gelesen: 3391

Beitrag als Lesezeichen
Hallo Eugen,

okay, dann speichere bitte mal den folgenden Code im Dateiformat "Programm".
Das Ergebnis ist ein Droplet, auf dessen Icon Du die Dateien ziehen kannst.

Die Dateien können sich auch in einem Ordner befinden und Du kannst diesen Ordner auf das Icon droppen.

Code
(* 
OrdnerErzeugen_02d.app
Dieses Script erzeugt Ordner aufgrund der ersten zwei Worte von Datei-Namen
und verschiebt die Dateien hinein
© 23.07.14 / Hans Häsler, Châtelard 52, CH-1018 Lausanne
*)

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
display dialog "Ordner oder Dateien auf dem Icon
dieses Droplets deponieren." buttons "OK" default button 1 with icon 0
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
set AppleScript's text item delimiters to " "
-- Wiederholschleife, welche die gedroppten Objekte zum Handler 'processObject' schickt
repeat with aObject in allObjects
processObject(aObject)
end repeat
set AppleScript's text item delimiters to {""}
-- den Anwender informieren
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end open

-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist;
-- bei Ordnern wird eine Liste des Inhalts erstellt und die Elemente rekursiv behandelt
-- (d.h. zum aktuellen Handler geschickt). Dateien werden zum Handler 'processFile' gesandt.
on processObject(aObject)
-- wenn der Pfad mit einem Doppelpunkt endet, ist das Objekt ein Ordner
if (aObject as string) ends with ":" then
-- die Liste des Inhalts wird erstellt (ohne unsichtbare Dateien)
set contentsList to list folder aObject without invisibles

-- dies ist das rekursive Teil: die Wiederholschleife schickt alle Objekte zum Handler,
-- in welchem sie sich selbst befindet
repeat with anItem in contentsList
set objPath to ((aObject as Unicode text) & anItem)
processObject(objPath as alias)
end repeat

-- wenn das Objekt eine Datei ist ...
else
tell application "Finder"
-- den Namen der Datei ...
set fullName to name of file aObject
-- und den Pfad zum Ordner speichern
set contPath to (container of file aObject) as Unicode text
end tell
-- ... dann werden die Pfade und der Dateiname dem Handler 'processFile' übergeben
processFile(contPath, aObject, fullName)
end if
end processObject

-- die aktuelle Datei behandeln
on processFile(contPath, aObject, fullName)
-- eine Liste der Worte des Dateinamens erzeugen
set partList to text items of fullName
-- wenn die Liste mehr als ein Element enthält ...
if (count of partList) is greater than 1 then
-- den Ordnernamen zusammensetzen
set folName to (text items 1 thru 2 of partList) as string
-- und auch den vollen Pfad zum Ordner
set curFolder to contPath & folName
tell application "Finder"
-- wenn der Ordner nicht vorhanden ist ...
if not (exists curFolder) then
-- den Ordner erzeugen
make new folder at contPath with properties {name:folName}
end if
-- die aktuelle Datei hineinverschieben
move file aObject to curFolder
end tell
end if
end processFile

Hier funktioniert es wie vorgesehen. Und bei Dir?

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 23. Jul 2014, 18:03 geändert)
Änderungsverlauf:
Beitrag geändert von Hans Haesler (Veteran) am 23. Jul 2014, 18:03