[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, 09:25
Beitrag # 1 von 9
Bewertung:
(26389 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: 5826

12. Mai 2021, 10:11
Beitrag # 2 von 9
Beitrag ID: #579848
Bewertung:
(26364 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, 10:16
Beitrag # 3 von 9
Beitrag ID: #579849
Bewertung:
(26357 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, 12:18
Beitrag # 4 von 9
Beitrag ID: #579852
Bewertung:
(26298 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, 10:08
Beitrag # 5 von 9
Beitrag ID: #579918
Bewertung:
(25918 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: 5826

19. Mai 2021, 09:34
Beitrag # 6 von 9
Beitrag ID: #579925
Bewertung:
(25793 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: 5826

19. Mai 2021, 22:32
Beitrag # 7 von 9
Beitrag ID: #579928
Bewertung:
(25719 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, 08:51
Beitrag # 8 von 9
Beitrag ID: #579946
Bewertung:
(25576 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: 5826

21. Mai 2021, 08:53
Beitrag # 9 von 9
Beitrag ID: #579947
Bewertung:
(25571 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
  1. (*
    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, 09:34 geändert)
X