[GastForen Programmierung/Entwicklung AppleScript Applescript: Dateien in verschiedene Ordner kopieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Applescript: Dateien in verschiedene Ordner kopieren

Herr Knut
Beiträge gesamt: 5

12. Mai 2021, 07:25
Beitrag # 1 von 9
Bewertung:
(2603 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Servus, Grüezi und Hallo an die Gemeinde :)

Vorab: bisher habe ich keinerlei Erfahrungen mit Applescript und benötige daher eure Hilfe.

Ich benötige ein script, dass mir Bilddateien aus einem Ordner in bestimmte Zielordner kopiert. Es gibt insgesamt zwei Ausgangsordner:
Droplets ---HiRes---
Droplets ---LowRes---
In diesen Ordnern befinden sich .tif-Dateien, jeweils in hoher Auflösung (Droplets ---HiRes---) als auch in reduzierter Auflösung (Droplets ---LowRes---), die Dateinamen sind jeweils identisch.
Zur Veranschaulichung:

Ordner "Droplets ---HiRes---":

a=1234_2019...
a=1234_2020...
a=1234_2021...
a=4567_V01...
a=4567_V02...
a=8901...
a=98750...
usw...

Ordner "Droplets ---LowRes---":

a=1234_2019...
a=1234_2020...
a=1234_2021...
a=4567_V01...
a=4567_V02...
a=8901...
a=98750...
usw...

Die Länge der Dateinamen variiert.

Der/die Zielordner befinden sich auf einer externen Platte. Der Zielordner (---absortieren---) enthält eine unbestimmte Anzahl an Ordnern, die die gleichen Namen wie die abzusortierenden .tif-Dateien haben. In diesen Ordnern befinden sich drei weitere Ordner:
---HiRes---
---LowRes---
rohdaten

Zur Veranschaulichung:

Ordner "absorbieren" enthält folgende Ordnerstruktur:

Ordner: a=1234_2019... -> Unterordner: ---HiRes---, ---LowRes---, rohdaten
Ordner: a=1234_2020... -> Unterordner: ---HiRes---, ---LowRes---, rohdaten
Ordner: a=1234_2021... -> Unterordner: ---HiRes---, ---LowRes---, rohdaten
Ordner: a=4567_V01... -> Unterordner: ---HiRes---, ---LowRes---, rohdaten
Ordner: a=4567_V02... -> Unterordner: ---HiRes---, ---LowRes---, rohdaten
Ordner: a=8901... -> Unterordner: ---HiRes---, ---LowRes---, rohdaten
Ordner: a=98750... -> Unterordner: ---HiRes---, ---LowRes---, rohdaten
usw...

Ziel ist es, die entsprechende .tif-Dateien aus dem Ordner "Droplets ---HiRes---" in den richtigen Unterordner ---HiRes--- zu kopieren, gleiches mit den Dateien aus dem Ordner "Droplets ---LowRes---". Das bedeutet, die Dateinamen der .tif-Ausgangsdateien sowie die Zielordnernamen müssen ausgelesen werden, um die entsprechende Datei in den richtigen Ordner zu kopieren.

Das ganze kann gern in zwei Schritten erfolgen, sofern es sich in einem Schritt bewerkstelligen lässt, umso besser ;)

Liebe Gemeinde, ich freue mich, wenn ihr mir bei diesem Projekt unter die Arme greifen könnt! Es würde mir zukünftig eine Unmenge an Zeit ersparen!

Ich freue mich auf euer Feedback!
X

Applescript: Dateien in verschiedene Ordner kopieren

Hans Haesler
  
Beiträge gesamt: 5805

12. Mai 2021, 08:11
Beitrag # 2 von 9
Beitrag ID: #579848
Bewertung:
(2578 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Knut,

herzlich willkommen im AppleScript-Forum auf HilfDirSelbst! :-)

Solch ein Script hatte ich schon mal geschrieben. Aber leider fehlt mir bis auf Weiteres die Zeit, um es anzupassen.

Doch vielleicht kennt ein versierter Mitleser eine Lösung.

Gruss, Hans


als Antwort auf: [#579847]

Applescript: Dateien in verschiedene Ordner kopieren

Herr Knut
Beiträge gesamt: 5

12. Mai 2021, 08:16
Beitrag # 3 von 9
Beitrag ID: #579849
Bewertung:
(2571 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für das Willkommen!

Ich habe deinen Beitrag auch schon entdeckt und versucht, ihn an mein Problem anzupassen, leider erfolglos...

Vielleicht findest du ja doch noch die Zeit zur Anpassung...?

Erst mal beste Grüße!


als Antwort auf: [#579848]

Applescript: Dateien in verschiedene Ordner kopieren

Herr Knut
Beiträge gesamt: 5

12. Mai 2021, 10:18
Beitrag # 4 von 9
Beitrag ID: #579852
Bewertung:
(2512 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Falls die Info noch gebraucht wird:

ich arbeite unter macOS Catalina, Version 10.15.7


als Antwort auf: [#579849]

Applescript: Dateien in verschiedene Ordner kopieren

Herr Knut
Beiträge gesamt: 5

18. Mai 2021, 08:08
Beitrag # 5 von 9
Beitrag ID: #579918
Bewertung:
(2132 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
...so viele Ansichten und keiner der helfen kann? Oder zumindest einen Lösungsansatz hat? :(


als Antwort auf: [#579852]

Applescript: Dateien in verschiedene Ordner kopieren

Hans Haesler
  
Beiträge gesamt: 5805

19. Mai 2021, 07:34
Beitrag # 6 von 9
Beitrag ID: #579925
Bewertung:
(2007 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Knut,

vorab: Das AppleScript-Forum ist eigentlich dazu gedacht, einem Scripter zu helfen, wenn er ein Problem bei der Entwicklung eines Scripts hat. Aber nicht um ein Script zu "bestellen" und es umsonst zu kriegen.

Zudem: Zum Testen benötigt man eine Ordnerstruktur mitsamt den entsprechenden Dateien. Schon deren Erstellung ist mit einem gewissen Zeitaufwand verbunden. Noch länger wird das Schreiben und Prüfen des Scripts dauern.

Aus diesen Gründen ist es nicht erstaunlich, dass sich keiner vordrängt ...

Ich muss gleich weg, werde aber später versuchen, eine erste Lösung zustandezubringen.

Gruss, Hans


als Antwort auf: [#579918]

Applescript: Dateien in verschiedene Ordner kopieren

Hans Haesler
  
Beiträge gesamt: 5805

19. Mai 2021, 20:32
Beitrag # 7 von 9
Beitrag ID: #579928
Bewertung:
(1933 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend Herr Knut,

die erste Version des Droplets ist bereit. Der Link zum Herunterladen der Datei sollte schon bei Dir eingetroffen sein.

Es war eine schöne Herausforderung. Aber ziemlich knifflig. Weil vor jedem Kopieren einer Datei festgestellt werden muss, ob sie "HiRes" oder "LowRes" ist.
Zum Prüfen, ob das auch klappt, habe ich den einen Dateien die Etikette "Grün" und den anderen "Rot" zugewiesen.

Nun hoffe ich, dass sich das Droplet auch in der Praxis bewähren wird.

Gruss, Hans


als Antwort auf: [#579918]

Applescript: Dateien in verschiedene Ordner kopieren

Herr Knut
Beiträge gesamt: 5

21. Mai 2021, 06:51
Beitrag # 8 von 9
Beitrag ID: #579946
Bewertung:
(1790 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich danke dir ganz herzlich für deine schnelle Hilfe! Das Script erfüllt sämtliche Anforderungen und läuft tadellos!
Es freut mich auch zu hören, dass meine Anforderungen dich vor gewisse Herausforderungen gestellt haben, die du letztlich meisterlich gelöst hast ;)
Einfach können die meisten...

Beste Grüße aus Potsdam,

Herr Knut


als Antwort auf: [#579928]

Applescript: Dateien in verschiedene Ordner kopieren

Hans Haesler
  
Beiträge gesamt: 5805

21. Mai 2021, 06:53
Beitrag # 9 von 9
Beitrag ID: #579947
Bewertung:
(1785 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#579928]
(Dieser Beitrag wurde von Hans Haesler am 21. Mai 2021, 07:34 geändert)
X