[GastForen Programmierung/Entwicklung AppleScript

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Dateien in Ordner sortieren

Hans Haesler
  
Beiträge gesamt: 5826

26. Feb 2017, 22:12
Bewertung:

gelesen: 8244

Beitrag als Lesezeichen
Hallo Rüdiger,

der nachfolgende Code als Programm gespeichert, ergibt ein Droplet.
Auf dessen Icon kann man einen Ordner ziehen. Oder einzelne oder mehrere Dateien.

Das Script setzt den Namen des Ziel-Ordners zusammen und verschiebt die aktuelle Datei in diesen Ordner.
Getestet mit Dateinamen von "5000000A.MPF" bis "5999999H.MPF".

Bei der ersten Ausführung muss der Hauptordner, welcher all die Unterordner enthält, gewählt werden.
Wenn im gewählten Hauptordner ein Zielordner nicht vorhanden ist, wird er erzeugt.

Code
(*   
DateienVerschieben_03d.app
Dieses Script verschiebt Dateien in entsprechende Ordner des Hauptordners
aufgrund der sieben Ziffern zu Beginn der Datei-Namen
© 27.02.17 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

property mainFolder : ""
global probCtr

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
display dialog "Den Ordner 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
-- den Hauptordnerpfad prüfen
tell application "Finder"
-- auswählen lassen falls nicht vorhanden
if not (exists mainFolder) then
set mainFolder to my defineFolder()
end if
end tell
set probCtr to 0
-- Wiederholschleife, welche die gedroppten Objekte zum Handler 'processObject' schickt
repeat with aObject in allObjects
processObject(aObject)
end repeat
-- den Anwender informieren
activate me
if probCtr is 0 then
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
else if probCtr is 1 then
display dialog "Eine Datei nicht verschoben." buttons "OK" default button 1 with icon 2
else if probCtr is greater than 1 then
display dialog "" & probCtr & " Dateien nicht verschoben." buttons "OK" default button 1 with icon 2
end if
end open

-- der Handler zur Wahl des Hauptordners
on defineFolder()
activate me
set newFolder to (choose folder) as Unicode text
return newFolder
end defineFolder

-- im folgenden Handler wird festgestellt, ob das Objekt ein Ordner oder eine Datei ist;
-- der Inhalt des Hauptordners wird aufgelistet; 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
tell application "System Events"
set contentsList to name of every file of folder (aObject as Unicode text)
end tell
-- die Wiederholschleife schickt die Dateien zum Handler 'processFile'
repeat with curItem in contentsList
set objPath to ((aObject as Unicode text) & curItem)
-- unsichtbare Dateien ausschliessen
if not (curItem starts with ".") then
-- Dateipfad und Name senden
if (count of curItem) is greater than 11 then
processFile(objPath as alias, curItem)
end if
end if
end repeat
-- wenn das Objekt eine Datei ist ...
else
tell application "Finder"
-- der Name der Datei ...
set fullName to name of file aObject
end tell
-- ... wird der Pfad und der Dateiname dem Handler 'processFile' übergeben
processFile(aObject, fullName)
end if
end processObject

-- die aktuelle Datei behandeln
on processFile(aObject, fullName)
-- die sieben Zeichen aus dem Dateinamen ziehen
try
set curNum to (text 1 thru 7 of fullName) as integer
on error
set probCtr to probCtr + 1
return
end try

-- den Ordnernamen errechnen und zusammensetzen
set tmpVal to (curNum div 250) - 20000
set firstVal to 5000000 + (tmpVal * 250)
set secondVal to firstVal + 249
set folName to (firstVal & "-" & secondVal) as string

-- und auch den vollen Pfad zum Unterordner
set curFolder to (mainFolder & folName) as string

tell application "Finder"
-- wenn der Ordner vorhanden ist ...
if (exists curFolder) then
-- ... versuchen, die aktuelle Datei hineinzuverschieben
try
move file aObject to curFolder with replacing
end try
else
-- sonst den Ordner zuerst erzeugen ...
set curFolder to make new folder at folder mainFolder with properties {name:folName}
-- ... und dann die Datei verschieben
try
move file aObject to curFolder with replacing
end try
end if
end tell
end processFile

Ich habe Dir das Script als Droplet gespeichert per PM zugestellt. Möglicherweise musst Du es erneut abspeichern.

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 27. Feb 2017, 09:46 geändert)
Änderungsverlauf:
Beitrag geändert von Hans Haesler (Veteran) am 27. Feb 2017, 09:46