[GastForen Programmierung/Entwicklung AppleScript Bildname aus Ordnername übernehmen

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

Bildname aus Ordnername übernehmen

Anonym
Beiträge gesamt: 22827

23. Feb 2005, 20:44
Beitrag # 1 von 10
Bewertung:
(3092 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

wenn auf dem Servervolume "TF-Rohdaten"
ein leerer Ordner mit Namen: "TF05s020021" existiert,
würde ich gerne beim "In den Ordner kopieren von Bilddaten" den Ordnername auf die Bilder übertragen.

z.B.
existierender Ordnername:  "TF05S022023"

"bildnamexy.tif" sollte als      "TF05S022023B01"
"bildnameyz.tif" als         "TF05S022023B02"
u.s.w. bezeichnet sein

wäre so was machbar?

Gruesse willem
X

Bildname aus Ordnername übernehmen

Hans Haesler
  
Beiträge gesamt: 5826

23. Feb 2005, 23:03
Beitrag # 2 von 10
Beitrag ID: #419355
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

ich glaube ja. Das folgende Script bittet den Finder als erstes, den Namen des Ordners, an welchen die Ordneraktion
angehängt ist, zu speichern. Dann geht es in einer Wiederholungsschleife die Dateien durch. Für jede wird ein
neuer Name vorbereitet. An den Stamm des Ordnernamens wird der Buchstabe "B" gehängt und die zwei letzten Buchstaben
aus der Textkette "0" und der Wert des Zählers 'i'. Somit hat man automatisch die führende Null bei den Ziffern 1 bis 9.
Ab der '10' wird die Null immer noch davor geklebt, aber gleich wieder abgeschnitten. Der Finder setzt den neuen Namen ein.
---
on adding folder items to thisFolder after receiving itemList
   tell application "Finder" to set folName to name of thisFolder
   repeat with i from 1 to count of itemList
      try
         set fullPath to ((item i of itemList) as string)
         if not (fullPath ends with ":") then
            try
               set newName to folName & "B" & text -2 thru -1 of ("0" & i)
               tell application "Finder" to set name of file fullPath to newName
            end try
         end if
      end try
   end repeat
end adding folder items to

---
Dieses Script kann ohne Änderung verschiedenen Zielordnern angehängt werden. Bedingung ist aber, dass die Dateien
jedes Mal in einem Rutsch in den betreffenden Ordner kopiert werden. Wenn diese Einschränkung unpraktisch ist, dann
müsste ich mir etwas einfallen lassen ...

Gruss, Hans


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Anonym
Beiträge gesamt: 22827

25. Feb 2005, 21:34
Beitrag # 3 von 10
Beitrag ID: #419356
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Tschuldigung :-)
bin erst jetzt dazu gekommen, Dir zu antworten.

Das Script funktioniert, lässt aber manchmal 2 oder 3 Files unberührt.
(habe alles auf einen Rutsch kopiert)

Wäre es denkbar, dass man einen Ordner auf ein Droplet zieht und dieser Ordner ist danach der "Aktive" in den man die Bilder kopiert?

Besten Dank
willem


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Hans Haesler
  
Beiträge gesamt: 5826

25. Feb 2005, 23:50
Beitrag # 4 von 10
Beitrag ID: #419357
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

dass einzelne Files nicht umbenannt werden, sollte eigentlich nicht vorkommen (ausser wenn man sie
nachträglich in den Ordner kopiert). Ist es vielleicht so, dass der Finder den Inhalt (noch) nicht
aufgefrischt hat und dass ein Klick auf die Zeile notwendig ist, um den neuen Namen zu sehen?

Das wiederholte Zuweisen einer Ordneraktion hättest Du gerne komfortabler, als  es mit dem Durch-
hangeln per Kontextmenü ist? Hast Du es mit dem Hilfsprogramm "Ordneraktionen konfigurieren" schon
mal versucht? Das zugehörige Dialogfenster öffnet sich nach der Wahl des gleichnamigen Kontextmenü-
Artikels (Control-Taste niederhalten und mit dem Mauszeiger auf den Schreibtischhintergrund klicken).

Noch immer zuwenig praktisch? Ein Droplet hättest Du gerne? Kann ich anbieten. Dank der "System Events",
welche das Zuweisen per Script erlauben. Beim ersten Droppen eines Ordners auf das Droplet erscheint
ein Dialog mit welchem das Ordneraktions-Script ausgewählt werden muss. Weil man später immer dasselbe
Script zuweisen will, wird der Pfad zu diesem Script gespeichert. Wenn mal ein anderes Script ausgewählt
werden soll, muss das aktuelle Script umbenannt, verschoben oder gelöscht werden. Alternativ kann man
auch im Droplet eine kleine Änderung vornehmen (z.B. an einer harmlosen Stelle einen Zwischenraum
einfügen) und speichern. Dadurch wird der Pfad zurück auf den definierten leeren String gesetzt und
der Dialog erscheint wieder.
---
property scriptPath : ""

on open droppedObject
   if scriptPath = "" then
      with timeout of 300 seconds
         set scriptPath to (choose file of type "osas" with prompt "Das Ordneraktions-Script wählen") as Unicode text
      end timeout
   else
      try
         scriptPath as alias
      on error
         with timeout of 300 seconds
            set scriptPath to (choose folder with prompt "Das Ordneraktions-Script wählen") as Unicode text
         end timeout
      end try
   end if
   set folPath to item 1 of droppedObject as Unicode text
   if folPath ends with ":" then
      tell application "System Events"
         attach action to folPath using scriptPath
      end tell
   end if
end open

---
Wichtig: Das ausgewählte Script muss im Ordner "~/Library/Scripts/Folder Action Scripts" liegen. Sonst wird
sich beim Ausführen nichts tun.

Gruss,
Hans


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Anonym
Beiträge gesamt: 22827

26. Feb 2005, 09:45
Beitrag # 5 von 10
Beitrag ID: #419358
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Seit einem Neustart funktioniert das Script (alle Namen sind korrekt)

Das Droplet ist so was von super !!!

Frage:
Könnte man den "aktiven" Ordner farblich kennzeichnen,
und ein 2. Droplet zum Deaktivieren des OrdnerScripts (Farbe Keine)
stellen, das wäre genial :-)

Gruss und Danke
willem


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Hans Haesler
  
Beiträge gesamt: 5826

26. Feb 2005, 11:55
Beitrag # 6 von 10
Beitrag ID: #419359
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

also ...  Du kannst dasselbe Ordneraktions-Script an beliebig viele Ordner anfügen. Und alle sind
gleichzeitig "aktiv". Die Frage ist nur, ob dann die Performance des Systems leidet, weil die
Applikation "System Events" alle drei Sekunden bei den mit Ordnerscripts "bestückten" Ordnern
vorbeischaut, um zu prüfen, ob sich etwas getan hat.

Es macht deshalb eventuell durchaus Sinn, nur den aktuellen Ordner mit einem Script auszustatten.
Und bei den "erledigten" Backup-Ordnern die Aktion wieder zu entfernen.

Hier das geänderte Ende des oben geposteten Scripts, mit welchem dem Ordner die Etikettenfarbe 6
(= normalerweise "Grün") zugewiesen wird.
---
   if folPath ends with ":" then
      tell application "System Events"
         try
            attach action to folPath using scriptPath
         end try
      end tell
      try
         tell application "Finder" to set label index of folder folPath to 6
      end try
   end if
end open

---
Und hier der Code für ein Droplet, welches die Ordneraktion entfernt und die Etikettenfarbe
des Ordners wieder auf "Keine" setzt.
---
on open droppedObject
   set folPath to item 1 of droppedObject as Unicode text
   if folPath ends with ":" then
      tell application "System Events"
         try
            remove action from folPath using action number 1
         end try
      end tell
      try
         tell application "Finder" to set label index of folder folPath to 0
      end try
   end if
end open

---
Ich habe versucht, die beiden Aktionen in einem einzigen Script unterzubringen aber ohne Erfolg.
Ich habe jetzt leider keine Zeit mehr, um weiterzuforschen, den wir fahren bald weg (meine liebe Frau
wird langsam ungeduldig ;-).

Gruss, Hans


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Anonym
Beiträge gesamt: 22827

2. Mär 2005, 21:03
Beitrag # 7 von 10
Beitrag ID: #419360
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das mit den 2 Droplets funktioniert wunderbar!

Danke willem


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Hans Haesler
  
Beiträge gesamt: 5826

8. Mär 2005, 23:22
Beitrag # 8 von 10
Beitrag ID: #419361
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

und hier ist der Knüller, welcher mir vorgeschwebt ist. :-)

Der folgende Code – als Applikation gespeichert – ergibt ein Droplet. Ich nenne es "OrdneraktOnOff_01d".
Dieser Name deutet an, dass es einem gedroppten Ordner ein Ordneraktions-Script anhängen oder das angehängte
entfernen kann. Die Etikettenfarbe des Ordners wird je nach Zustand auf "Grün" oder "Keine" gesetzt.

Es kommt noch besser: Wenn man ein Ordneraktions-Script auf das Droplet zieht, merkt sich dieses den Pfad
und hängt dem nächsten gedroppten (scriptfreien) Ordner dieses Script an.

Das ist noch nicht alles! :-) Ein Doppelklick auf das Droplet zeigt einen Dialog mit dem Pfad zum aktuellen
Ordneraktions-Script. Per Klick auf die Buttons kann der Anwender diesen Pfad bestätigen oder verlangen,
ein neues Script auszuwählen oder den Pfad zu entfernen. Wenn noch kein Script eingetragen ist, oder dieses
nicht gefunden werden kann, erscheint ein entsprechender Dialog.
---
property scriptPath : ""

on run
   showConfig()
end run

on showConfig()
   if scriptPath is not "" then
      try
         scriptPath as alias
         set dR to button returned of (display dialog ¬
            "Das aktuelle Ordneraktions-Script:
" & scriptPath buttons {"Entfernen", "Ändern", "OK"} default button 3 with icon 1)
         if dR = "Ändern" then
            modConfig()
         else if dR = "Entfernen" then
            set scriptPath to ""
         end if
      on error
         with timeout of 300 seconds
            set dR to button returned of (display dialog ¬
               "Das aktuelle Ordneraktions-Script kann nicht gefunden werden." buttons ¬
               {"Abbruch", "Auswählen"} default button 2 with icon 2)
            if dR = "Auswählen" then
               set scriptPath to (choose file of type "osas" with prompt "Ein Ordneraktions-Script wählen") as Unicode text
            end if
         end timeout
      end try
   else
      set dR to button returned of (display dialog ¬
         "Es ist kein Ordneraktions-Script bekannt." buttons {"Abbruch", "Auswählen"} default button 2 with icon 1)
      if dR = "Auswählen" then
         modConfig()
      end if
   end if
end showConfig

on modConfig()
   with timeout of 300 seconds
      set scriptPath to (choose file of type "osas" with prompt "Ein Ordneraktions-Script wählen") as Unicode text
   end timeout
   showConfig()
end modConfig

on open droppedObject
   set folPath to item 1 of droppedObject as Unicode text
   if folPath ends with ":" then
      tell application "System Events"
         set scriptList to attached scripts folPath
         if scriptList is {} then
            if scriptPath = "" then
               tell application "Finder" to activate
               with timeout of 300 seconds
                  set scriptPath to ¬
                     (choose file of type "osas" with prompt "Ein Ordneraktions-Script wählen") as Unicode text
               end timeout
            else
               try
                  scriptPath as alias
               on error
                  tell application "Finder" to activate
                  with timeout of 300 seconds
                     set dR to button returned of (display dialog ¬
                        "Das aktuelle Ordneraktions-Script kann nicht gefunden werden." buttons ¬
                        {"Abbruch", "Auswählen"} default button 2 with icon 2)
                     if dR = "Auswählen" then
                        set scriptPath to ¬
                           (choose file of type "osas" with prompt "Ein Ordneraktions-Script wählen") as Unicode text
                     end if
                  end timeout
               end try
            end if
            attach action to folPath using scriptPath
            set folStatus to true
         else
            repeat with i from (count of scriptList) to 1 by -1
               remove action from folPath using action number i
            end repeat
            set folStatus to false
         end if
      end tell
      if folStatus then
         tell application "Finder" to set label index of folder folPath to 6
      else
         tell application "Finder" to set label index of folder folPath to 0
      end if
   else
      if file type of (get info for file folPath) is "osas" then
         set scriptPath to folPath
      end if
   end if
end open

---
Was fehlt noch? Erstens, die Prüfung, ob das gewählte Script an einem zulässigen Ort liegt (und somit als
Ordneraktion akzeptiert wird). Zweitens, ob es ein veritables Ordneraktions-Script ist. Und drittens, ob der Code
fehlerfrei funktioniert. Während der erste Punkt halbwegs zuverlässig eingebaut werden könnte, wird es ab dem
zweiten ziemlich schwierig. Doch sollte der Anwender auch etwas Eigenverantwortung zeigen ...

Gruss, Hans


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Anonym
Beiträge gesamt: 22827

9. Mär 2005, 18:35
Beitrag # 9 von 10
Beitrag ID: #419362
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Das ist ja die DELUXE-Version !!!
Wär doch was fürs Apple X Betriebssystem oder?!

> Doch sollte der Anwender auch etwas Eigenverantwortung zeigen ...

Genau, jeder sollte die verwendeten Scripts kennen.
dann klappt es auch mit dem Droplet :-)

Danke Hans
Gruesse willem


als Antwort auf: [#419354]

Bildname aus Ordnername übernehmen

Hans Haesler
  
Beiträge gesamt: 5826

9. Mär 2005, 21:21
Beitrag # 10 von 10
Beitrag ID: #419363
Bewertung:
(3091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Willem,

bitteschön!

>Das ist ja die DELUXE-Version !!!
Sehr komfortabel, nicht wahr? Das Zuweisen der Scripts kann per Drag'n'Drop erfolgen
und nicht mehr durch das mühsame Durchhangeln im Dialogfenster.

>Wär doch was fürs Apple X Betriebssystem oder?!
Yeah! Aber die lassen sich nicht in diese Niederungen herab :-(

Gruss, Hans


als Antwort auf: [#419354]
X