[GastForen Programmierung/Entwicklung AppleScript

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Applescript: Dateien in verschiedene Ordner kopieren

Hans Haesler
  
Beiträge gesamt: 5826

21. Mai 2021, 08:53
Bewertung:

gelesen: 9834

Beitrag als Lesezeichen
Hallo AppleScripter,

vermutlich wird kaum jemand genau diese speziellen Anforderungen haben. Doch der eine oder andere könnte den Code an seine Bedürfnisse anpassen:

Code
(*   
DateienKopieren_02d.app
Dieses Script kopiert Bilddateien in entsprechende Ordner des Zielordners
© 20.04.2021 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

global targetFolder
global probCtr

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

# der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
# den Zielordner wählen lassen
set targetFolder to choose folder with prompt "Den Zielordner wählen" as Unicode text
tell application "Finder" to set folName to name of targetFolder
if not (folName is "---absortieren---") then
set userDec to button returned of (display dialog "Der gewählte Ordner ist nicht \"---absortieren---\"" buttons {"Stopp", "Kein Problem"} with icon 2)
if userDec is "Stopp" then
error number -128
end if
end if

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 kopiert." buttons "OK" default button 1 with icon 2
else if probCtr is greater than 1 then
display dialog "" & probCtr & " Dateien nicht kopiert." buttons "OK" default button 1 with icon 2
end if
end open

# 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)
set itemPath to (aObject as string)
# wenn der Pfad mit einem Doppelpunkt endet, ist das Objekt ein Ordner
if itemPath ends with ":" then
# den Typen der Datei speichern
if itemPath contains "---HiRes---" then
set fileType to "---HiRes---"
else if itemPath contains "---LowRes---" then
set fileType to "---LowRes---"
else
# wenn keines von beiden: Abbruch der Aktion
return
end if
# 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 fileType is "---HiRes---" then
processHigh(objPath as alias, curItem, fileType)
else if fileType is "---LowRes---" then
processLow(objPath as alias, curItem, fileType)
end if
end if
end repeat
end if
end processObject

# die aktuelle HiRes-Datei behandeln
on processHigh(aObject, fullName, fileType)
# der Dateiname ohne Suffix
try
set curNume to (text 1 thru -5 of fullName)
on error
set probCtr to probCtr + 1
return
end try

# der Pfad zum aktuellen Unterordner
set subFolder to (targetFolder & curNume) as string
# prüfen, ob dieser Unterordner vorhanden ist
tell application "Finder"
if not (exists subFolder) then
make new folder at folder targetFolder with properties {name:curNume}
end if
end tell

# der Pfad zum HiRes-Zielordner
set highFolder to (targetFolder & curNume & ":---HiRes---") as string

tell application "Finder"
# wenn der High-Ordner vorhanden ist ...
if (exists highFolder) then
# ... versuchen, die aktuelle Datei hineinzukopieren
try
duplicate file aObject to highFolder with replacing
end try
else
# sonst den Ordner zuerst erzeugen ...
set curFolder to make new folder at folder subFolder with properties {name:"---HiRes---"}
# ... und dann die Datei kopieren
try
duplicate file aObject to highFolder with replacing
end try
end if
end tell
end processHigh

# die aktuelle LowRes-Datei behandeln
on processLow(aObject, fullName, fileType)
# der Dateiname ohne Suffix
try
set curNume to (text 1 thru -5 of fullName)
on error
set probCtr to probCtr + 1
return
end try

# der Pfad zum aktuellen Unterordner
set subFolder to (targetFolder & curNume) as string
# prüfen, ob dieser Unterordner vorhanden ist
tell application "Finder"
if not (exists subFolder) then
make new folder at folder targetFolder with properties {name:curNume}
end if
end tell

# der Pfad zum LowRes-Zielordner
set lowFolder to (targetFolder & curNume & ":---LowRes---") as string

tell application "Finder"
# wenn der Low-Ordner vorhanden ist ...
if (exists lowFolder) then
# ... versuchen, die aktuelle Datei hineinzukopieren
try
duplicate file aObject to lowFolder with replacing
end try
else
# sonst den Ordner zuerst erzeugen ...
set curFolder to make new folder at folder subFolder with properties {name:"---LowRes---"}
# ... und dann die Datei kopieren
try
duplicate file aObject to lowFolder with replacing
end try
end if
end tell
end processLow

Diese Zeilen im Format "Programm" sichern. Dann bekommt man das gebrauchsfertige Droplet.

*****
Und noch etwas: Herzlichen Dank an Herrn Knut für seine vorbildliche Spende!

Gruss, Hans

(Dieser Beitrag wurde von Hans Haesler am 21. Mai 2021, 09:34 geändert)
Änderungsverlauf:
Beitrag geändert von Hans Haesler (Veteran) am 21. Mai 2021, 09:34