Automator eller script?

Tråden skapades och har fått 34 svar. Det senaste inlägget skrevs .
  • Medlem
  • Thailand
  • 2009-03-01 06:37

Automator laddar vid inställd tid ned en fil som heter "foo dagensdatum.pdf"
Den byter alltså namn varje dag, men namnet slutar alltid med dagens datum, t.ex. "xxx2009-03-01.pdf" för dagens version. Den hamnar i mappen "hämtade filer".

Jag vill byta namn på denna fil och flytta den (eller kopiera, spelar ingen roll) till en mapp som heter "foodelen" (eller nåt liknande). Filen kommer att heta "senaste.pdf" och skall ersätta den tidigare med samma namn.

Det skall naturligtvis ske automatiskt på angiven tid varje dag.

Har försökt en längre tid i Automator, men jag kommer inte runt att filen byter namn varje dag.

Jag välkomnar anvisningar!

Det löser du lättast med AppleScript, men det tar ett tag att skriva ihop. Har inget liggande som kan göra det du vill heller direkt.

Läs mer här:
http://applescript.wikia.com/wiki/AppleScript_Tutorial_Wiki

  • Medlem
  • Stockholm
  • 2009-03-01 10:07

Det borde väl gå att infoga ett applescript i automator som sätter en variabel till datumet, sen hämtar nästa steg i automator variabelnamnet och så är du hemma.

  • Medlem
  • Thailand
  • 2009-03-01 10:16
Ursprungligen av jonasn:

Det borde väl gå att infoga ett applescript i automator som sätter en variabel till datumet, sen hämtar nästa steg i automator variabelnamnet och så är du hemma.

I Automator, åtgärd "hitta finder-objekt" skulle det smaka att kunna skriva en kod så att dagens datum blev sök-kriterium. Men hur?

  • Medlem
  • Thailand
  • 2009-03-01 10:23
Ursprungligen av Sweet_112:

Det löser du lättast med AppleScript, men det tar ett tag att skriva ihop. Har inget liggande som kan göra det du vill heller direkt.

Läs mer här:
http://applescript.wikia.com/wiki/AppleScript_Tutorial_Wiki

Läser så ögonen blöder men fattar bara hälften...

Ett Applescript som gör exakt som du vill kan se ut så här:

(*
ATT FLYTTA EN FIL MED DAGENS DATUM
Av: Ola@intelligentmammals.se, 2009-03-01

*)

-- Vad är dagens datum?
----------------------------------------------------------------
set y to year of (current date)
set m to month of (current date)
set d to day of (current date)
set longnumberAsString to (y * 10000 + m * 100 + d) as string
set nicedate to text 1 thru 4 of longnumberAsString & "-" & text 5 thru 6 of longnumberAsString & "-" & text 7 thru 8 of longnumberAsString

-- Vad blir då filens namn och plats?
----------------------------------------------------------------
tell application "Finder"
set theFileName to "Lalala " & nicedate & ".pdf"
set theFileNameAndPath to file theFileName of folder "Hämtade filer" of folder "Ola" of folder "Users" of disk "Spiderman" as file specification
end tell

-- Vart skall den?
----------------------------------------------------------------
tell application "Finder"
set theDestinationFolder to folder "Desktop" of folder "Ola" of folder "Users" of disk "Spiderman" as alias
end tell

-- Eftersom det vanligen redan ligger en fil på den platsen, så behöver vi slänga den först (att skriva över kan vi inte göra, för filen vi kopierar har ett annat namn)
----------------------------------------------------------------
tell application "Finder"
try
move file "senaste.pdf" of folder theDestinationFolder to trash
end try
end tell

-- Dags att flytta på den och byta namn på den
----------------------------------------------------------------
tell application "Finder"
-- Vi kör med ett sk try-statement, vilket man gör om man inte vet om något kommer att fungera, kanske filen inte finns där just idag? Eller vi har redan flyttat på den idag?
try
move theFileNameAndPath to theDestinationFolder with replacing
-- Istället för move kan du även använda copy
set theFileNameAndPath to the result
set the name of theFileNameAndPath to "senaste.pdf"
on error
-- Här kan man göra saker om det inte funkade att flytta filen.
display dialog "Opps! Det funkade inte att flytta filen."
end try


end tell

Senast redigerat 2009-03-01 11:34

Du klistrar in det i manusredigareren som ligger i programmappen > applescript. Du kan sedan spara det i flera format, tex som ett program.

För att få manuset att köras varje dag, så finns det många lösningar. En sådan är Script Timer (sök på det här på 99.se och google), ett annat är iCal och en tredje är att det körs varje gång du loggar in. (Det finns flera).

Om du har datorn inställd så att den sätts på automatiskt vid en viss tid, så kan du även logga in automatiskt och då ha detta script bland Startobjekt. (När det är sparat som program så kan du högerklicka på programfilen och välja "Öppna vid inloggning". )

Lära sig Applescript
Länken du fick var det inget större fel på, men jag rekommenderar hellre min egen site om Applescript, där finns det flera länkar till ställen att lära sig om Applescript och förstås många exempel som är kommenterade.

http://applescript.intelligentmammals.se/ (Missa inte svenska flaggan!)

Det finns även flera trådar här på 99 där jag har skrivt och publicerat mycket om Applescript och Automator. Sök.

Självklart går scriptet ovan jag skrivit att skriva mycket effektivare (dvs kortare), men då blir det mindre pedagogiskt, och det pedagogiska är det jag siktar på.

Senast redigerat 2009-03-01 11:41
  • Medlem
  • 2009-03-01 11:21
se ny kod längre ner i tråden

Trigga sedan detta med ett iCal-event.

  • Medlem
  • 2009-03-01 11:22

shit pommes frites!
Taz är först igen!

Min lösning är simplare men gör i princip samma sak.

  • Medlem
  • Thailand
  • 2009-03-01 11:25

återkommer! Just nu avgörs vasaloppet!

Baron, funkar ditt script? Min erfarenhet är att så fort man döpt om en fil med Finder så tappar scriptet bort referensen till den, så därför kan man inte direkt efteråt flytta på den eller göra något med den. Därför har jag döpa om den som absolut sista steg.

I övrigt tycker jag ditt script ser fiffigt ut, det är kortare och gör samma sak och innehåller en del funktioner som är otrolgit bra att kunna när man hållit på med Applescript ett tag: Du lagrar tex en property i scriptet så att man första gången man gör det får tala om vad prefixet är och de kommande gångerna då det skall körs automatiskt så frågar den inte. Men när jag provar ditt så frågar den varje gång. Det fattas ett par rader för att lagra prefix och mappar mm eller? (Jag jobbar inte så mycket med properties). Andra gången så döps inte heller filen om, det blir bara en move.

  • Medlem
  • 2009-03-01 12:02

Hm, det fungerade nyss... Jag får kolla upp det i så fall.

Jag har aldrig haft problem med Finderflyttar.

  • Medlem
  • Thailand
  • 2009-03-01 12:33

Hmm, nybörjare på script fattar långsamt.
Tass: filen heter typ abc_def_2009-03-01.pdf och skall i nya mappen heta senaste.pdf
Var skriver jag abc-def i ditt script?

Baron: skall jag skriva något inom citattecknen "" Har aldrig hört talas om property, sorry, måste läsa på.

Ursprungligen av Stig R:

Hmm, nybörjare på script fattar långsamt.
Tass: filen heter typ abc_def_2009-03-01.pdf och skall i nya mappen heta senaste.pdf
Var skriver jag abc-def i ditt script?

Baron: skall jag skriva något inom citattecknen "" Har aldrig hört talas om property, sorry, måste läsa på.

Leta rätt på denna bit, leta sedan i den biten rätt på Lalala. Det är prefixet. Var noga med mellanslag mm.

-- Vad blir då filens namn och plats?
----------------------------------------------------------------
tell application "Finder"
set theFileName to "Lalala " & nicedate & ".pdf"
set theFileNameAndPath to file theFileName of folder "Hämtade filer" of folder "Ola" of folder "Users" of disk "Spiderman" as file specification
end tell

Notera också att i mitt script så flyttas filen till skrivbordet. Men det är förstås lätt att ändra. Som du ser anger man sökvägar i mitt script på formen of folder ditten of folder datten. Så börja med mappen längst ner (i slutet) och skriv så många "of folder ditten" du behöver. Säg att du vill flytta den till en mapp i din dokument-mapp som heter Tokigheter. I så fall är sökvägen skriven med kolon:

Hårddisk:Users : ( Ditt namn ) : Dokument:Tokigheter

vilket i mitt Appelscript skrivs som

folder "Tokigheter" of folder "Dokument" of folder "(Ditt namn)" of folder "Users" of disk "Hårddisk"

Notera att i slutet står det of disk (dvs vilken hårddisk det är). Min hårddisk heter "Spiderman".

Notera även att du skall ersätta (Ditt namn) med namnet på din hemma-mapp. I mitt fall heter den Ola.

Dessutom heter jag Taz (tre bokstäver) och inte Tass (fyra bokstäver).

  • Medlem
  • 2009-03-01 12:29
-- Att flytta och döpa om en fil
-- © Per Ljunghall, Sydsvenskan, 2009


property myPrefix : ""
property myFilename : ""
property myDestinationPath : ""
property myFilePath : ""
property myTargetName : ""

if myFilePath is "" then
	set myFilePath to (choose folder with prompt "Var ligger filen som ska kopieras?") as string
end if
if myDestinationPath is "" then
	set myDestinationPath to (choose folder with prompt "Vart ska filenkopieras?") as string
end if

set myDate to current date
set myY to year of myDate as string
set myM to (month of myDate as integer) as string
if (count of text items of myM) is 1 then
	set myM to "0" & myM
end if
set myD to day of myDate as string
if (count of text items of myD) is 1 then
	set myD to "0" & myD
end if
set myDateID to myY & myM & myD

set myFilenameSuffix to myY & "-" & myM & "-" & myD & ".pdf"

if myPrefix is "" then
	set myPrefixDialog to display dialog "Vilket prefix i filnamnet letar du efter?" default answer "xxx"
	set myPrefix to text returned of myPrefixDialog
	set myFilename to myPrefix & myFilenameSuffix
	display dialog "Filen du letar efter heter i dag " & return & myFilename as string
end if

if myTargetName is "" then
	set myTargetDialog to display dialog "Vad ska den kopierade filen heta?" default answer "senaste.pdf"
	set myTargetName to text returned of myTargetDialog
	--	set myFilename to myPrefix & myFilenameSuffix
	--	display dialog "Filen du letar efter heter i dag " & return & myFilename as string
end if

set myFilename to myPrefix & myFilenameSuffix

set myFile to alias (myFilePath & myFilename)
tell application "Finder"
	try
		set myOldFile to alias (myDestinationPath & "senaste.pdf")
		move myOldFile to trash
	end try
	set name of myFile to myTargetName
	set myFile to alias (myFilePath & myTargetName)
	try
		duplicate myFile to folder myDestinationPath replacing yes
		set name of myFile to (myDateID & "-" & time of myDate as string) & "-senaste.pdf"
	on error
		display dialog "Det sket sig i kopieringen!"
	end try
end tell

Hmm, jag fick lite problem med att filen som skulle ersättas var upptagen?! Nu städar jag undan i målmappen först, och kopierar sedan.
Jag märker originalfilen lite tydligare, med datum och sekunder från midnatt för att undvika namnkrockar.
Vi vet ju inte om originalet ska sparas eller inte...

  • Medlem
  • 2009-03-01 12:38

Klipp och klistra in hela skriptet i manusredigeraren och spara som program eller kör direkt från manusredigeraren.
Skriptet är redan färdigt, du behöver inte skriva något alls.

  • Medlem
  • 2009-03-01 12:45

Jag hade visst missat en sak. Nu ska det stämma ändå.

(Varför sitter jag med detta när jag måste jobba... )

Ursprungligen av Baron:

(Varför sitter jag med detta när jag måste jobba... )

Håller med dig, oftast får man varken tack eller öl eller cash.

Man kan skicka blommogram hit och dit, varför kan man inte skicka öl-o-gram?

Senast redigerat 2009-03-01 13:00
  • Medlem
  • 2009-03-01 13:01

Eller så tar du mitt skript som frågar efter sökvägar i stället...

Ah, men scriptet skall ju köras automatiskt och obevakat dagligen. Därför valde jag att hårdkoda sökvägar i scriptet istället för att fråga efter dem.

Funkar ditt script så med properties att den frågar bara första gången och kommande gånger så minns den förutsättningarna och frågar inte fler gånger?

  • Medlem
  • 2009-03-01 13:10
Ursprungligen av Taz_1999:

Ah, men scriptet skall ju köras automatiskt och obevakat dagligen. Därför valde jag att hårdkoda sökvägar i scriptet istället för att fråga efter dem.

Funkar ditt script så med properties att den frågar bara första gången och kommande gånger så minns den förutsättningarna och frågar inte fler gånger?

Äh, jag bara skojar lite...

Men visst kommer det ihåg sökvägarna.
Jag skrev också in frågor om vad filen heter och ska heta sedan.

  • Medlem
  • Thailand
  • 2009-03-01 16:31
Ursprungligen av Baron:

Äh, jag bara skojar lite...

Men visst kommer det ihåg sökvägarna.
Jag skrev också in frågor om vad filen heter och ska heta sedan.

Jag är ytterst tacksam för dessa fantastiska råd! Om Taz (blev det rätt nu?) eller Baron har vägarna förbi Bangkok, maila mig så skall jag bjuda på en öl eller två. Samt visa upp våra datorer om det skulle vara intressant.

Jag har nu kört Barons script och fått det att fungera, puh!

En sista fråga - vad gör jag nu. Vill kunna spara det i en form som iCal kan köra, ungefär som insticksprogrammet från Automator. I Scriptredigerare - inställningar - insticksfiler finns ingenting.

Det är betydligt fiffigare.

  • Medlem
  • 2009-03-01 16:36

Om automator redan användas kan du nog klistra in skriptet i ditt Automatorflöde. Jag kan inte automator, men vet att det går att göra.
Annars tror jag du kan be automator köra ett skript som ligger utanför.
Som sagt, jag kan inte Automator så bra. Annars sparar du som manus och ställer in iCal på att köra skriptet.

  • Medlem
  • Thailand
  • 2009-03-01 17:11

Det verkar fungera!
Automator har en Åtgärd som heter "Kör Applescript-script"
Eftersom filen verkligen flyttas, inte kopieras, kan jag inte upprepa och försäkra mig om att det går att anpassa till alla mina filer, jag vill upprepa det tre gånger.
I morgon får jag en ny fil att testa med, då skall det gå bra. Om inte lär ni höra av mig igen.

Eftersom vi har GMT +7 stänger jag butiken för idag och tillönskar en skön söndagkväll.

Kul att det blev svensk seger i Vasaloppet

Än en gång - stort TACK!

  • Medlem
  • 2009-03-01 17:19

Jo, filen kopieras.

duplicate myFile to folder myDestinationPath replacing yes

Men originalet byter namn till nåt i stil med 20090301-45847-senaste.pdf. Den första strängen är datum, inte så svårt att se, och den andra är antal sekunder som gått sedan midnatt. Tillsammans fungerar dessa som ett unikt id.

Jag testade med en fil som heter det din originalfil heter, dvs xxx2009-03-01.pdf och gjorde det ett antal gånger efter varandra med önskat resultat. Det kan du också testa. Så länge det hela tiden är samma fil borde det nog inte påverka något.

  • Medlem
  • Thailand
  • 2009-03-02 00:47

Lysande, Baron!
Jo, filerna finns kvar! Jag sökte på xxx men de finns ju på 20090301. Kanske dags att rensa mappen hämtade filer

Nu har vi morgon, har ni gått i säng ännu?

  • Medlem
  • Thailand
  • 2009-03-03 09:24

Hej igen!
Måste krypa till korset och fråga om råd.
Efter att ha sparat scriptet som ical-påminnelse glöms sökvägarna. Jag måste fylla i dem varje gång och det kommer inte att funka. Måste nog hårdkoda några saker:

Jag har fyllt i property myPrefix med rätt text och property myTargetName, men sökvägarna till myFilePath och DestinationPath får jag inte till.
Filen som skall kopieras ligger i Users/stig/Hämtade filer. Borde vara busenkelt, men jag missar någonstans.
property myDestinationPath : "/Library/WebServer/Documents/ har jag skrivit, men det kanske inte är särskilt bra heller?

myPrefix och myTargetName har jag fyllt i och det verkar funka.

Ah, men det var ju min poäng med att hårdkoda sökvägarna.

Tillägg: I Applescript kan man skriva sökvägar på flera sätt, men man måste tala om för Applescript vad man menar om man använder andra sökvägar.

Om du kollar på min site (se mitt inlägg ovan), så finns en länk till Applescript Language Guide på första-sidan. Den PDF-filen innehåller allting du behöver veta.

Du kan skriva sökvägar med kolon, med / och på formen "of folder xx of folder yy of disk zz" Om / inte funkar, vilket det vanligen inte gör för sökvägar med / mellan mapparna kallas för POSIX-sökvägar och man måste tala om för Applescript att det är en sådan, så funkar de två andra formerna av sökvägar.

  • Medlem
  • Thailand
  • 2009-03-03 10:39

Taz, jag testar just ditt script, tror jag får det att funka.Det verkar som att första gången hamnar filen senaste.pdf i rätt mapp, andra gången hamnar en fil med ursprungsnamnet där. Vet inte om senaste.pdf har bytts ut då.

Måste tyvärr avbryta för andra plikter just nu, återkommer i morgon.

Bevaka tråden