6 berichten aan het bekijken - 1 tot 6 (van in totaal 6)
  • Q:
    Bijdrager
    tdwesten

    [Opgelost] Applescript – datum toevoegen en verplaatsen

    Ik wil graag mijn inkomende facturen hernoemen en verplaatsen/sorteren naar kwartaal. De stuctuur ziet er zo uit:

    – Inkomende facturen
    — 2010
    — Kwartaal 1
    —- 20100322_factuur_x.pdf
    — Kwartaal 2
    — Kwartaal 3
    — Kwartaal 4

    De bedoeling is dat wanneer ik een factuur in de map inkomende facturen zet hier aan de aanmaak datum wordt toegevoegd (20100322_) en verplaatst wordt naar de goede kwartaal map. In het goede jaar. Het is natuurlijk helemaal mooi als hij ook even checkt of deze jaar map met kwartalen al bestaat.

    Wie helpt mij op weg?

    Bijdrager
    michelvdb

    Duik eens in het onderwerp Mapacties. Zie Mac OS X Help en typ in het zoekveld <mapacties>.

    Bijdrager
    dj bazzie wazzie

    Kan je ook met een dropscript doen. Dan hoef je de bestanden alleen maar op dit script te slepen.

    Hier het script in een functie gepast. Het script heeft als parameter een lijst met bestanspaden nodig (zodat je ook meerdere bestanden op een dropscript kan gooien)

    Pas de property rootFolder aan naar waar jou map met facturen moet komen te staan. Daarnaast kan je deze functie voor dropscripts als mapacties gebruiken. Vandaar ff in een functie geplaatst

    <br />
    property rootFolder : ((path to desktop folder) & "Inkomende Facturen:" as string)<br />
    on moveFiles(TheFiles)<br />
    	tell application "Finder"<br />
    		repeat with theFilePath in TheFiles<br />
    			set theFile to name of file theFilePath<br />
    			log theFile<br />
    			set compatible to true<br />
    			-- controleren of bestandsnaam lang genoeg is<br />
    			if length of (theFile as string) < 9 then<br />
    				set compatible to false<br />
    			end if<br />
    			-- controleren of onderliggend streepje op positie negen is<br />
    			if (offset of "_" in (theFile as string)) is not 9 then<br />
    				set compatible to false<br />
    			end if<br />
    			set dateInFileName to characters 1 thru 8 of theFile as string<br />
    			-- controleren of de datum wel allemaal uit getallen bestaat<br />
    			if not my stringOnlyIntegers(dateInFileName) then<br />
    				set compatible to false<br />
    			end if<br />
    			if compatible then<br />
    				set theYear to (characters 1 thru 4 of dateInFileName as string)<br />
    				set theMonth to (characters 5 thru 6 of dateInFileName as string)<br />
    				set theDay to (characters 7 thru 8 of dateInFileName as string)<br />
    				--wanneer jaarmap nog niet bestaat deze aanmaken<br />
    				if not (exists (alias (rootFolder & theYear & ":" as string))) then<br />
    					make new folder at rootFolder with properties {name:theYear}<br />
    				end if<br />
    				set yearFolder to rootFolder & theYear & ":" as string<br />
    				if theMonth is in {"01", "02", "03"} then<br />
    					-- kwartaal mappen aanmaken als deze niet bestaan<br />
    					if not (exists (folder (yearFolder & "Kwartaal 1" as string))) then<br />
    						make new folder at yearFolder with properties {name:"Kwartaal 1"}<br />
    					end if<br />
    					set destinationFolder to yearFolder & "Kwartaal 1:" as string<br />
    				else if theMonth is in {"04", "05", "06"} then<br />
    					-- kwartaal mappen aanmaken als deze niet bestaan<br />
    					if not (exists (folder (yearFolder & "Kwartaal 2" as string))) then<br />
    						make new folder at yearFolder with properties {name:"Kwartaal 2"}<br />
    					end if<br />
    					set destinationFolder to yearFolder & "Kwartaal 2:" as string<br />
    				else if theMonth is in {"07", "08", "09"} then<br />
    					-- kwartaal mappen aanmaken als deze niet bestaan<br />
    					if not (exists (folder (yearFolder & "Kwartaal 3" as string))) then<br />
    						make new folder at yearFolder with properties {name:"Kwartaal 3"}<br />
    					end if<br />
    					set destinationFolder to yearFolder & "Kwartaal 3:" as string<br />
    				else if theMonth is in {"10", "11", "12"} then<br />
    					-- kwartaal mappen aanmaken als deze niet bestaan<br />
    					if not (exists (folder (yearFolder & "Kwartaal 4" as string))) then<br />
    						make new folder at yearFolder with properties {name:"Kwartaal 4"}<br />
    					end if<br />
    					set destinationFolder to yearFolder & "Kwartaal 4:" as string<br />
    				end if<br />
    				move file theFile to folder destinationFolder<br />
    			end if<br />
    		end repeat<br />
    	end tell<br />
    end moveFiles<br />
    on stringOnlyIntegers(theText)<br />
    	--zorgen dat theText altijd een string is<br />
    	set theText to theText as string<br />
    	set allowedCharacters to {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}<br />
    	repeat with theChar in theText<br />
    		if theChar is not in allowedCharacters then<br />
    			return false<br />
    		end if<br />
    	end repeat<br />
    	return true<br />
    end stringOnlyIntegers<br />
     
    Bijdrager
    tdwesten

    Dank! Al lijkt het nog niet te werken…

    Hoe zit de eerste regel er uit als het pad als volgt is? /Users/tdwesten/Desktop/Inkomende Facturen

    Bijdrager
    dj bazzie wazzie

    Het is een functie die niet wordt aangeroepen dus ook nog niets doet. Je moet de functie aanroepen vanuit je ‘main’ functie. Die is bij een dropscript anders dan een map actie. Ik heb het script getest door tussen regel 1 en regel twee de volgende code toe te voegen en bij mij werkte het perfect.

    <br />
    set theFile to choose file as string<br />
    moveFiles({theFile})<br />
     

    Zo ziet je eerste regel eruit. Ongeacht welke gebruiker op welke computer je bent het script werkt alleen wanneer er een map ‘Inkomende Facturen’ op staat. Het commando ‘Path to desktop folder’ vervangt zichzelf met het macintosh pad naar je bureaublad. Let op in jou post heb je het over een unix pad en moet je het commando posix file voor de string plaatsen (zet je unix pad om in macintosh pad)

    Bijdrager
    tdwesten

    Het volgende script werkt geheel naar wens:

    http://cl.ly/c621fb18545b7fd8fc8c

    Mijn dank aan @dj bazzie wazzie voor het schrijven van het bovenstaande script!

6 berichten aan het bekijken - 1 tot 6 (van in totaal 6)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.