Hallo,
also du hast mehr Ahnung davon als ich, kann dein Problem selbst nicht lösen. Aber ich habe mal ein Script gefunden, dass in der Lage ist, die Dokumente in einem Ordner inklusive aller Unterordner zu zählen. Dabei ist auch eine Droplet-Version. Vielleicht lässt sich das Zählen durch deine Aktion ersetzen.
Hoffe das hilft,
Gruß
Code:global anzahlFiles on run set anzahlFiles to 0 set theFileList to (choose folder) as list repeat with theFile in theFileList File_or_Folder(theFile) end repeat tell application "Finder" display dialog "Es befinden sich total " & anzahlFiles & " Dateien innerhalb dieses Ordners." buttons {"OK"} default button {"OK"} end tell end run on open theFileList set anzahlFiles to 0 repeat with theFile in theFileList File_or_Folder(theFile) end repeat tell application "Finder" display dialog "Es befinden sich total " & anzahlFiles & " Dateien innerhalb dieses Ordners." buttons {"OK"} default button {"OK"} giving up after 20 end tell end open on File_or_Folder(theFile) set theInfo to info for theFile if folder of theInfo then tell application "Finder" set FolderList to every item of theFile end tell repeat with theFolder in FolderList set theFolder to theFolder as alias my File_or_Folder(theFolder) end repeat else ProcessIt(theFile) end if end File_or_Folder on ProcessIt(theFile) set anzahlFiles to anzahlFiles + 1 end ProcessIt
Ergebnis 1 bis 9 von 9
- 08.02.2011, 17:15 #1Jonagold
Themenstarter
- Registriert
- 07.2010
- Beiträge
- 18
Applescript-Droplet soll Unterordner abarbeiten Hallo Äppler
,
ich hänge mittlerweile seit Tagen an einem Problem, bei dem ich einfach keine Lösung finde. Ich habe ein Applescript-Droplet erstellt welches .tif-Dateien in Photoshop öffnet, Alpha-Kanäle entfernt, auf HG-Ebene reduziert und das ganze als .jpg mit bestimmten Vorgaben speichert. Danach werden die tiffs in einen davor im Quellordner angelegten Ordner Verschoben.
Soweit funktioniert das Droplet einwandfrei. Nun ist es aber so das die Ordnerstruktur wie folgt aussieht:
Hauptordner
- Unterordner 1: Bild1, Bild 2, Bild 3, etc...
- Unterordner 2: Bild1, Bild 2, Bild 3, etc...
- Unterordner 3: Bild1, Bild 2, Bild 3, etc...
- ..
Es sind einfach viel zu viele Unterordner, als dass ich diese einzeln, nacheinander auf das Droplet ziehen könnte (meistens über 100 Unterordner).
Gibt es eine Möglichkeit, dass ich einfach nur den Hauptordner auf mein Droplet ziehe und dieses dann in die jeweiligen Unterordner geht und in diesem dann die dort vorhandenen Bilder abarbeitet und verschiebt?
Habe natürlich schon über die Suchfunktion gesucht und auch gegoogelt aber nichts brauchbares gefunden. Falls es doch schon einen Thread zu diesem Thema geben sollte, einfach sagen.
Würde mich über Hilfreiche Tipps oder sogar eine Lösung freuen.
Danke!
Der Patzi
P.s.: Hier noch mein Script:
Code:on open {input} tell application "Finder" to set theFiles to document files of input whose name extension is in {"tif"} --In Photoshop öfffnen und als jpg in Quellordner speichern: repeat with oneFile in theFiles tell application "Adobe Photoshop CS4" open (oneFile as alias) showing dialogs {never} if exists (delete (every channel whose kind is not component channel) of document 1) then end if flatten document 1 save document 1 in input as JPEG with options {embed color profile:true, format options:standard, quality:5} appending lowercase extension without copying close document 1 saving no end tell end repeat --Tiffs in Ordner verschieben tell application "Finder" make new folder in input with properties {name:"Altlasten"} set tiffs to (document files of input whose name extension is in {"tif"}) move tiffs to folder "Altlasten" of input end tell return input end open
- 08.02.2011, 23:28 #2Jonagold
- Registriert
- 12.2010
- Beiträge
- 23
MacBook 5.1; 13.3 Zoll, Prozessor 2,4 GHZ intel Core 2 Duo, Speicher: 2GB, Snow Leopard
- 09.02.2011, 02:43 #3
Ich glaube was du suchst ist "entire contents"
Probier mal das aus:
In deinem Script fügst du nach
folgende Zeile ein:Code:on open {input}
und dann zusätzlich noch nachCode:set theFiles to (getFilesRecursively(input, "tif"))
folgenden Handler:Code:end open
Code:on getFilesRecursively(fContainer, fExt) tell application "Finder" set recursiveFileList to entire contents of fContainer as alias list set resultFileList to {} repeat with aFile in recursiveFileList if name extension of aFile contains fExt then set resultFileList to resultFileList & aFile end if end repeat end tell return resultFileList --this is an alias list!!! end getDocumentFilesRecursively
Das
müsstest du auskommentieren.Code:tell application "Finder" to set theFiles to document files of input whose name extension is in {"tif"}
Weiter unten müsstest du das
inCode:open (oneFile as alias)
abändern, weil der Handler eine Aliasliste zurückgibt. Ich bin mir fast sicher, dass das einen Fehler ausspuckt, wenn du das nicht änderst (ich hab's jetzt nicht ausprobiert....).Code:open oneFile
Dir wird evtl. auffallen, dass der Handler nur nach "name extension" guckt und nicht, wie bei dir, auch nach der "class" (document file). Das ist so, weil die rekursive Liste als Aliasliste geladen wird, was dazu führt das die class jedes Items "alias" ist. Wenn du unbedingt die class checken musst, dann würde es so funktionieren:
Vorsicht: Das Ergebnis ist immer noch eine Aliasliste!Code:on getDocumentFilesRecursively(fContainer, fExt) tell application "Finder" set recursiveFileList to entire contents of fContainer set resultFileList to {} repeat with aFile in recursiveFileList if name extension of aFile contains fExt ¬ and class of aFile is document file then set resultFileList to resultFileList & (aFile as alias) end if end repeat end tell return resultFileList --this is an alias list!!! end getDocumentFilesRecursively
Da du von über hundert Unterordnern geschrieben hast, würde ich dir, falls keine Probleme auftreten, die erste Variante empfehlen. Eine Aliasliste ist schneller geladen als eine ...uhm... "Referenzliste" (nenn ich jetzt einfach mal so... ^^).The cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 09.02.2011, 08:13 #4Jonagold
Themenstarter
- Registriert
- 07.2010
- Beiträge
- 18
Hi ihr zwei,
vielen Dank schonmal für die Hilfe. Ich werde mich gleich mal dranmachen und ein wenig rumprobieren.
Werd euch das Ergebnis wissen lassen.
Greetz
Patzi
- 09.02.2011, 09:29 #5Jonagold
Themenstarter
- Registriert
- 07.2010
- Beiträge
- 18
Hey fyysh,
habe deine Erklärung mal in die Tat umgesetzt. Funktioniert auch in sofern, dass Photoshop sich alle Dateien aus allen Unterordnern krallt und auch verarbeitet. Nur gespeichert werden diese dann alle zusammen in den Hauptordner (hängt wahrscheinlich mit dem "save document 1 in input"-command zusammen).
Weißt du eventuell wie er es Schafft, das jpg in den Selben Unterordner zu speichern, von dem aus es geöffnet wurde? Habe auch schonmal beim save-command das "in input" weggelassen, das Problem dabei ist, dass dann in Photoshop für jedes Bild der speichern unter-Dialog aufgeht und das ist bei ca. 500-1000 Bildern dann doch etwas lästig
Ist bei deinem Scriptvorschlag eventuell irgendwo eine Variable mit der Herkunft des Originalbildes definiert? Dann würde ich einfach die nehmen und anstatt "save in input", dann halt "save in Herkunftsvariable" schreiben und alles müsste rein theoretisch funktionieren. Habs leider nicht ganz so mit den ganzen Variablen in Applescript
Dank dir schonmal im Vorraus und dir natürlich auch Streptokokke (werde mir das von dir Vorgeschlagene Script auch mal anschauen).
Greetz
Patzi
- 09.02.2011, 10:06 #6
Hi,
probier mal so:
änder das
inCode:flatten document 1 save document 1 in input as JPEG with options {embed color profile:true, format options:standard, quality:5} appending lowercase extension without copying
Code:flatten document 1 tell app "finder" to set output to (container of oneFile as alias) save document 1 in output as JPEG with options {embed color profile:true, format options:standard, quality:5} appending lowercase extension without copyingThe cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 09.02.2011, 14:31 #7Jonagold
Themenstarter
- Registriert
- 07.2010
- Beiträge
- 18
Hey fyysh!
hab gerade einen "kleinen" Testlauf mit meinem Script gemacht (77 Unterordner, 713 Bilder).
Hat zwar seine Zeit gedauert (45-60 Minuten) aber lief fast ohne Probleme durch, nur am Schluss, als es um das Löschen der 713 tiff-Bilder ging hat es einen Timeout gegeben. Die Bilder wurden aber trotzdem gelöscht.
Hier mein fertiges Script:
Sollte dir noch etwas auffallen, das besser gemacht werden könnte bzw. etwas, das den ganzen ablauf etwas beschleunigt, kannst du's mir gerne mitteilen. Bin für jede Hilfe Dankbar.Code:on open {input} set theFiles to (getFilesRecursively(input, "tif")) --#####In Photoshop öfffnen und als jpg in Quellordner speichern##### repeat with oneFile in theFiles tell application "Adobe Photoshop CS4" open oneFile showing dialogs {never} if exists (delete (every channel whose kind is not component channel) of document 1) then end if flatten document 1 tell application "Finder" to set output to (container of oneFile as alias) save document 1 in output as JPEG with options {embed color profile:true, format options:standard, quality:5} appending lowercase extension without copying close document 1 saving no end tell end repeat --#####Tiffs löschen##### tell application "Finder" delete (document files of entire contents of input whose name extension is in {"tif"}) end tell end open on getFilesRecursively(fContainer, fExt) tell application "Finder" set recursiveFileList to entire contents of fContainer as alias list set resultFileList to {} repeat with aFile in recursiveFileList if name extension of aFile contains fExt then set resultFileList to resultFileList & aFile end if end repeat end tell return resultFileList end getFilesRecursively
Jetzt bleibt mir nur noch, ein Script zu schreiben, das die Dateigröße der jpg's checkt und alle Bilder über 2MB zu einem gewissen Prozentsatz in Photoshop verkleinert
Dir aber auf jeden fall nochmal vielen vielen Dank, hast mir sehr geholfen!
Greetz
Patzi
- 09.02.2011, 15:23 #8
Hi nochmal,
du hast dir da am Schluss ne Bremse eingebaut. Lösche die tifs besser im loop oben, denn die Aliase hast du schon - du brauchst die nicht neu laden (du lädst sogar Referenzen - das dauert, wie gesagt, noch länger...).
d.h. das weg:
Code:--#####Tiffs löschen##### tell application "Finder" delete (document files of entire contents of input whose name extension is in {"tif"}) end tell
Und dafür weiter oben so abändern:
Code:tell application "Finder" to set output to (container of oneFile as alias) save document 1 in output as JPEG with options {embed color profile:true, format options:standard, quality:5} appending lowercase extension without copying close document 1 saving no tell app "finder" to delete oneFile --original tiff löschenThe cause of the problem is:
Don't worry; it's been deprecated.
The new one is worse.
- 26.02.2011, 08:27 #9Jonagold
Themenstarter
- Registriert
- 07.2010
- Beiträge
- 18
Hey fyysh!
Wenn auch etwas verspätet, aber vielen dank nochmal für deine Hilfe. Script ist optimiert und rechnet jetzt zusätzlich alle Bilder, die Größer als 2MB sind in Photoshop auf 50% runter. Klappt alles prima und wird auch schon fleißig in unserer Firma eingesetzt
Man kann diesen Thread demnach also als gelöst betrachten.
Cheerz
Patzi


Zitieren
