Det finns som vanligt mer än ett sätt att flå en katt.
Min personliga uppfattning är att man bör använda den metod som löser problemet bäst, kräver minst antal "dependencies", ger högst prestanda och tillförlitlighet. Så även om jag håller med Wire om att shell ger fantastiska möjligheter i allmänhet så tycker jag det är ett sämre alternativ i det här fallet, eftersom det är både svårare och långsammare än ett rent applescript, och dessutom knappast ger dig vad du är ute efter.
Grunden för en AppleScript-lösning ser ut så här:
set myPath to "Macintosh HD:Users:richardr:Desktop:kasta3.fp7"
set text item delimiters to ":"
set myFileName to text item -1 of myPath
set text item delimiters to ""
display alert myFileName
Dessvärre är det lite besvärligare än så: "Path to me" ger nämligen normalt sett namnet på den "script host" som kör scriptet, i normala fall programmets namn. Det betyder att "path to me" kommer att vara scriptets namn endast undantagsvis. Att du ser scriptets namn när du kör från Script Debugger är för att den är smartare och försöker hjälpa dig, men du kommer att få ett annat resultat när du kör skarpt...
Den enda gången du egentligen kan räkna med att "Path to me" ger det resultat du (troligen) önskar är om du sparat scriptet som ett program, och till och med då är det besvärligare än man tror, för att...
I OS X kan du spara ett script som program på två sätt, dels som ett program (rosetta) som ger en enda fil, och som en application bundle (universal) som ger ett programpaket, dvs en mapp som visas som en fil.
I och med att sökvägen till en application bundle är samma som till en mapp är sista tecknet i sökvägen ett kolon, vilket innebär att det första exemplets sista "text item" kommer att vara tomt, dvs "" I ett sånt fall måste du istället hämta text item -2, dvs den näst sista
För att verkligen glasera kakan så har InDesign dessutom en egen variant för att lösa problemet på ett tillförlitligt sätt, nämligen något som heter "active script" vilket är en filreferens till det script användaren faktiskt klickar på.
För att lösa problemet på ett tillförlitligt sätt, som kan användas i alla dina script, så borde det bli något i den här stilen:
set myPath to path to me as Unicode text
if (myPath) contains "Adobe InDesign" then
try
tell application "Adobe InDesign CS2" to set myPath to active script as Unicode text
end try
end if
set text item delimiters to ":"
set myFileName to text item -1 of myPath
if myFileName = "" then set myFileName to text item -2 of myPath
set text item delimiters to ""
tell me
activate
display alert (myFileName)
end tell