Ergebnis 1 bis 9 von 9
  1. #1
    Jonagold
    Themenstarter

    Registriert
    07.2010
    Beiträge
    18

    Achtung 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

  2. #2
    Jonagold
    Registriert
    12.2010
    Beiträge
    23
    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
    MacBook 5.1; 13.3 Zoll, Prozessor 2,4 GHZ intel Core 2 Duo, Speicher: 2GB, Snow Leopard

  3. #3
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    Ich glaube was du suchst ist "entire contents"

    Probier mal das aus:

    In deinem Script fügst du nach
    Code:
    on open {input}
    folgende Zeile ein:
    Code:
    set theFiles to (getFilesRecursively(input, "tif"))
    und dann zusätzlich noch nach
    Code:
    end open
    folgenden Handler:
    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
    Code:
    tell application "Finder" to set theFiles to document files of input whose name extension is in {"tif"}
    müsstest du auskommentieren.

    Weiter unten müsstest du das
    Code:
    open (oneFile as alias)
    in
    Code:
    open oneFile
    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....).

    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:
    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
    Vorsicht: Das Ergebnis ist immer noch eine Aliasliste!

    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.

  4. #4
    Jonagold
    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

  5. #5
    Jonagold
    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

  6. #6
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    Hi,

    probier mal so:

    änder das
    Code:
                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
    in

    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 copying
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  7. #7
    Jonagold
    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:

    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
    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.

    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

  8. #8
    Galloway Pepping Avatar von fyysh
    Registriert
    01.2010
    Ort
    Rheinknie
    Alter
    33
    Beiträge
    1.347
    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öschen
    The cause of the problem is:
    Don't worry; it's been deprecated.
    The new one is worse.

  9. #9
    Jonagold
    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

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •