hilfdirselbst.ch
Facebook Twitter gamper-media
Mac OS X enthält verschiedene integrierte Werkzeuge und Technologien, mit denen sich gängige Aufgaben schnell und einfach automatisieren lassen.
Anonym
Beiträge: 22827
29. Jun 2004, 17:50
Beitrag #1 von 8
Bewertung:
(1666 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Hallo Hans,

wie kann ich Files nach den ersten beiden Buchstaben sortieren
und sie dabei in einen bestimmten Ordner moven.

Beispiel: ba04s006007.tif soll in Ordner "Backen"
oder ko06s003.tif soll in Ordner "Kochen" wandern

würde es gern selber scripten, aber meine Kentnisse...

Gruss willem Top
 
X
Goar S
Beiträge: 318
1. Jul 2004, 09:43
Beitrag #2 von 8
Beitrag ID: #418851
Bewertung:
(1665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Hallo Willem,

der Kürze halber bin ich davon ausgegangen, dass Du die Bild-Dateien auf ein Droplet ziehen willst und dieses die Sortierung vornimmt
Dann könnte das Script so aussehen (OS9.2.2, AS1.6):
---
on open FileList
 set pictPath to "Macintosh HD:Jobs:Dateien_sortieren:Bilder:"
 set folderNames to {"Backen", "Kochen", "Schmoren"} -- die Namen der Zielordner
 set keyFolderNames to "ba;ko;sm" -- die für die Sortierung benötigten Zeichen in entsprechender Sortierung
 
 repeat with aFile in FileList
  tell application "Finder" to set fileName to name of aFile
  -- Sortierzeichen werden isoliert
  set sortChar to text from character 1 to character 2 of fileName
  -- Position des Zielordner-Namens in folderNames
  set sortKey to round ((offset of sortChar in keyFolderNames) / 3) rounding up
  if sortChar is in keyFolderNames then
   set sortPath to pictPath & item sortKey of folderNames as alias
   tell application "Finder" to move aFile to sortPath
  else
   display dialog "Für " & fileName & " gibt es keine Sortiervorgabe." buttons {"OK"} default button 1
  end if
 end repeat
end open
---
Falls Du eine Datei auf das Droplet ziehst, die keine vereinbarte (in keyFolderNames vorhandene) Kennung hat, bekommst Du eine entsprechende Meldung. Erforderlich ist die aber nicht, denn Dateien, die nicht einsortiert werden können, bleiben einfach am Ursprungsort liegen. Also kannst Du die Meldung auch auskommentieren (--).

Gruß, Goar
als Antwort auf: [#418850] Top
 
Anonym
Beiträge: 22827
2. Jul 2004, 12:56
Beitrag #3 von 8
Beitrag ID: #418852
Bewertung:
(1665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Hallo Goar,

Danke für Dein Script
es laeuft einwandfrei!!!

sorry wenn ich erst jetzt frage:
Wie muss das Script aussehen, wenn zu:

  ba24s002.tif = (Backen)  (2 Zeichen)  noch
  b22s012.tif = (Baden)  (1 Zeichen)
  bas16s024.tif = (BackenSonderheft)  (3 Zeichen) dazukommen.

Habe mal folgende Zeile geändert:
-- set sortChar to text from character 1 to character 1 of fileName --

um zu testen ob "b22s012.tif" in den Ordner "Baden" gemovt wird.
Geht aber nit!

Gruss
willem
als Antwort auf: [#418850] Top
 
Hans Haesler  M  p
Beiträge: 5464
4. Jul 2004, 23:21
Beitrag #4 von 8
Beitrag ID: #418853
Bewertung:
(1665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Hallo Willem,

der gute Goar hat anscheinend anderes zu tun. Deshalb hier mein Kommentar. Seine Lösung würde auch mit einer unterschiedlichen Anzahl von Schlüsselbuchstaben funktionieren. Aber es ist effizienter, wenn auf das Bilden zweier Listen verzichtet wird. Und das Aufrunden sollte besser mit 'div' statt mit 'round / rounding up' vorgenommen werden, weil damit auf das langsame Aufrufen der Scripting Addition "Standard Additions" verzichtet werden kann. Und das Feststellen der Position benötigt einen weiteren Aufruf dieses Hilfsmittels.

Darum finde ich es besser, wenn eine direkte 'if /else if'-Schleife eingesetzt wird:
---
on run
  display dialog "Die zu sortierenden Dateien
auf das Icon dieses Droplets ziehen." buttons "OK" default button 1 with icon 0
end run

on open fileList
  set AppleScript's text item delimiters to {":"}
  repeat with aFile in fileList
    set filePath to aFile as string
    if filePath ends with ":" then
    else
      set fileName to text item -1 of filePath
      if fileName starts with "bas" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bildererheft" with replacing
        end try
      else if fileName starts with "ba" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bilder:Backen" with replacing
        end try
      else if fileName starts with "b" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bilder:Baden" with replacing
        end try
      else if fileName starts with "ko" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bilder:Kochen" with replacing
        end try
      end if
    end if
  end repeat
  set AppleScript's text item delimiters to {""}
end open
---
Habe ich geträumt oder stelltest Du mal die Frage, wie dieses Script anstatt als Droplet als Ordneraktion aussehen muss? Wenn dies der Fall ist, dann komme bitte zurück.

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418850] Top
 
Anonym
Beiträge: 22827
5. Jul 2004, 06:01
Beitrag #5 von 8
Beitrag ID: #418854
Bewertung:
(1665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Guten Morgen,

du hast nicht geträumt,
die letzte Anfrage hab ich editiert und danach versäumt zu fragen ob das Script als Ordneraktion machbar ist.
Die Frage an den Meister: wie kann man das Script als Ordneraktion umscripten?

Gruss willem
als Antwort auf: [#418850] Top
 
Hans Haesler  M  p
Beiträge: 5464
5. Jul 2004, 08:21
Beitrag #6 von 8
Beitrag ID: #418855
Bewertung:
(1665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Hallo Willem,

ein Ordneraktionsskript muss als normales, kompiliertes Script gesichert sein (also nicht als Application) und einen Handler enthalten, welcher eine typische Ordneraktion in der 'on'-Zeile aufweist, z.B.
Code
on adding folder items to thisFolder after receiving fileList 

Innerhalb dieses Handlers können Aufrufe an weitere Handler stehen. Man muss dabei nur beachten, dass die in beiden verwendeten Variablen bekannt sind. Entweder als 'global' deklariert oder als Parameter in den Klammern weitergereicht.

Beim zuletzt geposteten Droplet muss demnach nur die erste und die letzte Zeile des 'on open'-Handlers geändert werden, damit der Code als Ordneraktions-Script eingesetzt werden kann. Den Run-Handler brauchen wir nicht mehr:
---
on adding folder items to thisFolder after receiving fileList
  set AppleScript's text item delimiters to {":"}
  repeat with aFile in fileList
    set filePath to aFile as string
    if filePath ends with ":" then
    else
      set fileName to text item -1 of filePath
      if fileName starts with "bas" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bildererheft" with replacing
        end try
      else if fileName starts with "ba" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bilder:Backen" with replacing
        end try
      else if fileName starts with "b" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bilder:Baden" with replacing
        end try
      else if fileName starts with "ko" then
        try
          tell application "Finder" to move file aFile to folder "Macintosh HD:Jobs:Dateien_sortieren:Bilder:Kochen" with replacing
        end try
      end if
    end if
  end repeat
  set AppleScript's text item delimiters to {""}
end adding folder items to
---

Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418850] Top
 
Goar S
Beiträge: 318
5. Jul 2004, 09:57
Beitrag #7 von 8
Beitrag ID: #418856
Bewertung:
(1665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Hallo Willem, hallo Hans

gerade wollte ich meinen Vorschlag posten, da sah ich schon Euren Dialog  (Hans, Du bist einfach zu schnell für mich).
(Im aktuellen Vorschlag von Hans ist darauf zu achten, dass die längeren Kennungen vor den kürzeren abgearbeitet werden.)

Trotzdem mein Vorschlag, aufgepeppt mit einer Kleinigkeit, die ich aus Hans&#146; aktueller Version abgeguckt habe (with replacing), vielleicht gibt es ja einen Kommentar zum Dazulernen von Hans.

Dieses Script ist nach wie vor als Droplet geschrieben, aber wenn ich das richtig sehe, müssen ja nur die erste und die letzte Zeile geändert werden.

Eure Einstellmöglichkeiten:
In der Zeile "set lengthID&#133;" legt Ihr die maximale Länge der Kennung fest
In der Zeile "set pictPath&#133;" weist Ihr den gewünschten Pfad für den Bilderordner zu
In der if/if else-Abfrage legt Ihr fest, welcher Ordnername jeder Kennung zugeordnet werden soll.
Die Zeile mit der Fehlermeldung habe ich schon mal auskommentiert.
---
on open FileList
 set lengthID to 3 -- maximale Anzahl Kennbuchstaben
 set pictPath to "Macintosh HD:Jobs:Dateien_sortieren:Bilder:"
 
 set ctrlLoops to lengthID - 1
 set theNumbers to "1234567890"
 repeat with aFile in FileList
  tell application "Finder" to set fileName to name of aFile
  -- die definierte Anzahl Sortierzeichen wird isoliert
  set sortChar to text from character 1 to character lengthID of fileName
  repeat ctrlLoops times
   set lastChar to item -1 of sortChar
   if lastChar is in theNumbers then
    set sortChar to text from character 1 to character -2 of sortChar
   else
    exit repeat
   end if
  end repeat
  -- hier werden die Ordnernamen zugeordnet
  if sortChar = "ba" then
   set folderName to "Backen"
  else if sortChar = "bas" then
   set folderName to "BackenSonderheft"
  else if sortChar = "b" then
   set folderName to "Baden"
  else if sortChar = "ko" then
   set folderName to "Kochen"
  else if sortChar = "sm" then
   set folderName to "Schmoren"
  else if sortChar = "sms" then
   set folderName to "SchmorenSonderheft"
  else
   set folderName to ""
  end if
 
  if folderName != "" then -- Ordnername wurde zugewiesen
   set sortPath to pictPath & folderName as alias
   tell application "Finder" to move aFile to sortPath with replacing
  else -- Ordnername wurde nicht zugewiesen
   -- display dialog "Für " & fileName & " gibt es keine Sortiervorgabe." buttons {"OK"} default button 1
  end if
 end repeat
 display dialog "Fertig" buttons {"OK"} default button 1
end open
---

Gruß, Goar
als Antwort auf: [#418850] Top
 
Hans Haesler  M  p
Beiträge: 5464
5. Jul 2004, 11:33
Beitrag #8 von 8
Beitrag ID: #418857
Bewertung:
(1665 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Dateien nach ersten 2 Buchstaben sortieren


Hallo Goar, hallo Willem,

so schnell bin ich nun auch wieder nicht. :-) Aber um die Message kurz zu halten, verzichte ich manchmal leider darauf, wichtige Informationen zu erklären. Wie zum Beispiel von Goar richtig erkannt, dass bei gleichlautenden Anfangsbuchstaben zuerst die längeren Kennwörter in die Schleife gestellt werden müssen.

Das 'with replacing' beim Verschieben der Dateien bedeutet: Wenn sich im Zielordner schon eine gleichnamige Datei befindet wird diese ohne Warnung überschrieben. Man vermeidet so eine Meldung des Finders. Je nach Workflow kann man dies so einrichten. Wenn man aber auf Sicher gehen will, dann sollte man vor dem Verschieben prüfen, ob die Datei schon existiert und einen Dialog zeigen, wenn dem so ist. Der Anwender kann dann entscheiden, ob die Datei verschoben werden soll oder nicht.

Zu Goars Vorschlag: Die Definierung von 'pictPath' zu Beginn ist sehr gut, weil bei einer Änderung diese nur einmal vorgenommen werden muss.

Das Ausziehen des Namens per Finder ist als Einzeiler verlockend, sollte aber vermieden werden, weil der Finder langsam ist. Ich ziehe die Verwendung der 'text item delimiters' vor. Vorgängig sollte aber unbedingt der Test "Ordner oder Datei" eingeschoben werden. Wenn der Pfad mit einem Doppelpunkt endet, dann ist das Objekt ein Ordner und in diesem Fall wird nichts unternommen.

Das Feststellen der Kennbuchstaben per Wiederholschleife würde ich nur anwenden, wenn die Buchstaben nicht bekannt sind. Weil sie in diesem Fall aber im nachfolgenden 'if / else if'-Test stehen, ziehe ich es vor, den Beginn des Namens direkt mit 'starts with' zu testen. Hier nochmals als Ordneraktion:
---
property pictPath : "Macintosh HD:Jobs:Dateien_sortieren:Bilder:"

on adding folder items to thisFolder after receiving fileList
  set AppleScript's text item delimiters to {":"}
  repeat with aFile in fileList
    set filePath to aFile as string
    if filePath ends with ":" then
    else
      set fileName to text item -1 of filePath
      if fileName starts with "bas" then
        set folderName to "BackenSonderheft"
      else if fileName starts with "ba" then
        set folderName to "Backen"
      else if fileName starts with "b" then
        set folderName to "Baden"
      else if fileName starts with "ko" then
        set folderName to "Kochen"
      else if fileName starts with "sm" then
        set folderName to "Schmoren"
      else
        set folderName to ""
      end if
      if folderName is not "" then
        set sortPath to pictPath & folderName
        try
          tell application "Finder" to move file aFile to folder sortPath with replacing
        end try
      end if
    end if
  end repeat
  set AppleScript's text item delimiters to {""}
  display dialog "Fertig" buttons "OK" default button 1 giving up after 1
end adding folder items to
---
Hans Haesler <hsa@ringier.ch>
als Antwort auf: [#418850] Top
 
X