[GastForen Programmierung/Entwicklung AppleScript Ordner für Frische Bananen

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

Ordner für Frische Bananen

ehwda
Beiträge gesamt: 66

23. Jul 2014, 14:34
Beitrag # 1 von 10
Bewertung:
(3475 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter

Bin auf der Suche nach einem Script das folgendes tut:
Ausgewählte Dateien in einen neuen Ordner befördern und den Ordnernamen aus den ersten zwei Worten der ersten Datei bilden.

Also z.B. vorhandene Dateien:
Frische Bananen aus Caraas.xxx
Frische Bananen aus Costa Rica.xxx
Frische Bananen echt grün aus Island.xxx
Frische Bananen nicht entgast aus Honduras.xxx

Der Name des automatisch erzeugten Ordners soll dann heissen:
Frische Bananen

Habe Ähnliches schon gefunden, aber es ist mir leider nicht gelungen, es für mein Bedürfnis anzupassen.
Vielleicht kann mir jemand den Weg zeigen. Besten Dank schon mal.
Gruss Eugen
X

Ordner für Frische Bananen

Hans Haesler
  
Beiträge gesamt: 5826

23. Jul 2014, 14:57
Beitrag # 2 von 10
Beitrag ID: #530060
Bewertung:
(3431 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Eugen,

wo soll denn der neue Ordner erzeugt werden?
Im selben Ordner, wo sich die Dateien befinden?

Ich nehme an, dass Du immer noch den "Lion" benutzest.

Gruss, Hans


als Antwort auf: [#530058]

Ordner für Frische Bananen

ehwda
Beiträge gesamt: 66

23. Jul 2014, 15:15
Beitrag # 3 von 10
Beitrag ID: #530062
Bewertung:
(3412 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans

Danke für dein Interesse.
Ja, der Ordner soll am gleichen Ort wo sich die Dateien befinden angelegt werden. Und immer noch "Lion".

Gruss Eugen


als Antwort auf: [#530060]

Ordner für Frische Bananen

Hans Haesler
  
Beiträge gesamt: 5826

23. Jul 2014, 15:53
Beitrag # 4 von 10
Beitrag ID: #530066
Bewertung:
(3392 mal gelesen)
URL zum Beitrag
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


als Antwort auf: [#530062]
(Dieser Beitrag wurde von Hans Haesler am 23. Jul 2014, 18:03 geändert)

Ordner für Frische Bananen

ehwda
Beiträge gesamt: 66

23. Jul 2014, 16:21
Beitrag # 5 von 10
Beitrag ID: #530068
Bewertung:
(3363 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

funktioniert prima, genau das war die Idee.
Läuft wie geschmiert und spart mir eine Menge Zeit.
Wieder etwas zum Studieren und Lernen.

Herzlichen Dank und Gruss
Eugen


als Antwort auf: [#530066]
(Dieser Beitrag wurde von ehwda am 23. Jul 2014, 16:25 geändert)

Ordner für Frische Bananen

Hans Haesler
  
Beiträge gesamt: 5826

23. Jul 2014, 18:04
Beitrag # 6 von 10
Beitrag ID: #530070
Bewertung:
(3323 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Eugen,

bitte sehr.

Damit das Lernen etwas leichter fällt, habe ich den Code des oben geposteten Scriptes mit Kommentaren ergänzt. Vor allem im Handler 'processFile()'.

Geändert ist das Prüfen, ob der Ordner schon vorhanden ist. Dadurch braucht es die Zeile zum Verschieben der Datei nur einmal.

Vielleicht sollte dieses Verschieben mit einem try-Wickel abgesichert sein. Aber erstens sind doppelt vorkommende Dateien selten (oder?) und zweitens würde der Finder verständliche Meldungen zeigen.

Gruss, Hans


als Antwort auf: [#530068]

Ordner für Frische Bananen

ehwda
Beiträge gesamt: 66

25. Jul 2014, 16:50
Beitrag # 7 von 10
Beitrag ID: #530220
Bewertung:
(3187 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

dein Code ist sehr übersichtlich und ausgezeichnet kommentiert.
Aufs "try" können wir verzichten; doppelte Dateien kommen in diesem Fall nicht vor.

Wenn du noch weiter Lust hast, dir den Kopf zu zerbrechen ...
Ich könnte ein Script gebrauchen, das beliebige Zeichen (die ich im Dialog eingebe – evtl. mehrere durch ";" getrennt) aus Dateinamen aller Dateien in einem Ordner löscht.

Also z.B. (um bei Bananen zu bleiben):
Grüne Bananen (EU-konform) aus Casablanca - vielleicht echt Bio.xxx
Löschen möchte ich hier den Teil in und mit den Klammern sowie "echt".

Oder:
2345 gelbe Bananen (fast schon hinüber).xxx
Hier sollen die Ziffern weg.

Soweit die Idee, was meinst du?

Gruss, Eugen


als Antwort auf: [#530070]

Ordner für Frische Bananen

Hans Haesler
  
Beiträge gesamt: 5826

25. Jul 2014, 17:30
Beitrag # 8 von 10
Beitrag ID: #530227
Bewertung:
(3172 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Eugen,

so direkt ist das sehr schwierig zu realisieren.

Aber ich habe kürzlich ein AppleScript entwickelt, mit welchem Dateinamen geändert werden können. Die Idee dahinter könnte benutzt werden, um Dein Vorhaben zu realisieren.

Jetzt gerade bin ich unterwegs. Aber übers Wochenende werde ich mal einen Anpassungsversuch machen.

Gruss, Hans


als Antwort auf: [#530220]
(Dieser Beitrag wurde von Hans Haesler am 26. Jul 2014, 17:07 geändert)

Ordner für Frische Bananen

Hans Haesler
  
Beiträge gesamt: 5826

26. Jul 2014, 22:28
Beitrag # 9 von 10
Beitrag ID: #530254
Bewertung:
(3090 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Eugen,

das erwähnte Script scheint mir nun doch nicht geeignet für Deine Aufgabe zu sein.

Deshalb nachstehend ein anderer Ansatz, welcher Deine Anregung umsetzt: Im Dialog werden die zu entfernenden Zeichenfolgen eingegeben. Wenn es mehrere Teile sind: durch Strichpunkte abtrennen.

Das Script im Dateiformat "Programm" gespeichert, kann als Droplet (den Ordner, welcher die Dateien enthält, auf das Icon ziehen) benutzt werden. Man kann es aber auch ab Skriptmenü starten. In diesem Fall vorher den Ordner auswählen.

Code
(* 
DateienUmbenennen_01d.app
Dieses Script löscht definierte Zeichenfolgen in Dateinamen
© 26.07.14 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
*)

global delList

-- der 'run handler' wird benutzt, wenn das Script ab Menü gestartet wird
on run
-- den Anwender auffordern, die Zeichenfolgen einzugeben
set delString to text returned of (display dialog "Zu löschende Zeichenfolgen (trennen mit \";\")" default answer "")
-- den "Text-Element-Trennern" einen Strichpunkt zuweisen
set AppleScript's text item delimiters to {";"}
-- die Liste der Zeichenfolgen
set delList to every text item of delString
if (count of delList) is 0 then
display dialog "Die Eingabe ist leer. Bitte nochmals." buttons "OK" default button 1 with icon 0
set AppleScript's text item delimiters to {""}
error number -128
end if
-- die "Finder"-Auswahl
tell application "Finder"
set allObjects to selection
end tell
-- Wiederholschleife, welche die ausgewählten Objekte zum Handler 'processObject' schickt
repeat with aObject in allObjects
processObject(aObject as string)
end repeat
set AppleScript's text item delimiters to {""}
-- den Anwender informieren
activate me
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
-- den Anwender auffordern, die Zeichenfolgen einzugeben
set delString to text returned of (display dialog "Zu löschende Zeichenfolgen (trennen mit \";\")" default answer "")
-- den "Text-Element-Trennern" einen Strichpunkt zuweisen
set AppleScript's text item delimiters to {";"}
-- die Liste der Zeichenfolgen
set delList to every text item of delString
if (count of delList) is 0 then
display dialog "Die Eingabe ist leer. Bitte nochmals." buttons "OK" default button 1 with icon 0
set AppleScript's text item delimiters to {""}
error number -128
end if
-- 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 speichern
set fullName to name of file aObject
end tell
-- ... dann wird der Pfad dem Handler 'processFile' übergeben
processFile(aObject, fullName)
end if
end processObject

-- die aktuelle Datei behandeln
on processFile(aObject, newName)
-- eine Schleife durch die Elemente der Liste
repeat with n from 1 to count of delList
-- den "Text-Element-Trennern" das aktuelle Element zuweisen
set AppleScript's text item delimiters to {item n of delList}
-- durch das Verwandeln in eine Liste wird die Zeichenfolge entfernt
set newList to (text items of newName) as list
-- die "Text-Element-Trenner" als leerer String definieren
set AppleScript's text item delimiters to {""}
-- die Elemente der Liste werden in einen String verwandelt
set newName to newList as string
end repeat
-- eventuelle doppelte Leerschläge entfernen
set AppleScript's text item delimiters to {" "}
set newList to (text items of newName) as list
set AppleScript's text item delimiters to {" "}
set newName to newList as string
-- eventuellen führenden Leerschlag löschen
if newName starts with " " then
set newName to text 2 thru -1 of newName
end if
-- die aktuelle Datei umbenennen
tell application "Finder"
try
set name of file aObject to newName
end try
end tell
end processFile

Weil man nicht immer daran denkt, den Leerschlag – welcher auf das zu entfernende Wort folgt – einzugeben, löscht das Script eventuelle doppelte oder führende Leerschläge.

Gruss, Hans


als Antwort auf: [#530220]

Ordner für Frische Bananen

ehwda
Beiträge gesamt: 66

27. Jul 2014, 10:15
Beitrag # 10 von 10
Beitrag ID: #530259
Bewertung:
(3049 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für das ausführlich kommentierte Script. Es ist für mich äussert nützlich, um Unnützes in Dateinamen zu entfernen.

Gruss, Eugen


als Antwort auf: [#530254]
X