2012-04-12 11 views
8

In un applescript, ricevo un percorso file che devo aprire.Applescript: come aprire un file con il programma predefinito?

Il percorso file è nel formato "/Users/xxx/my/file/to/open.xyz".

Voglio aprirlo con il programma predefinito. Se si tratta di un file AVI, ho bisogno di aprirlo con un programma di video, se si tratta di un xls, con Excel, ...

Ho provato diverse cose senza alcun successo:

--dstfile contains the previous path 
tell application "Finder" 
    activate 
    open document dstfile 
end tell 

-> I' m ottenendo l'errore 1728, dicendomi che non era in grado di ottenere il documento

tell application "Finder" 
    activate 
    open document file dstfile 
end tell 

-> stesso qui

tell application "Finder" 
    activate 
    open document POSIX file dstfile 
end tell 

- > Lo stesso qui

Sono sicuro che il file esiste perché faccio questo prima di questo l'esecuzione di codice:

if not (exists dstfile) then 
    display dialog "File isn't existing" 
end if 

non posso usare l'open.xyz synthax di ad di ... perché ricevo questo come un parametro.

Please help Sono disperato: '(

Risposta: Sulla base delle risposte, io alla fine con questo:

set command to "open " & quoted form of dsturl 
do shell script command 
+0

Consiglio vivamente di evitare questa soluzione. È fragile, lento e completamente inutile. Usa la risposta di @kopischke: http://stackoverflow.com/a/10132641/754997 –

risposta

14

tuo problema qui è duplice:

  1. il tuo percorso è in POSIX notazione, che AppleScript non può costringere a un alias o file di oggetto accettabile per il Finder, in quanto questi verranno implicitamente create solo da stringhe di percorso in HFS notazione (Users:xxx:my:file:to:open.xyz). La dichiarazione esplicita del percorso come file POSIX risolverà questo problema. Tuttavia,
  2. la chiamata al Finder prefissi documento al percorso, ma il dizionario AppleScript di Finder non contiene un documento tipo di oggetto (esiste un file oggetto documento, ma si tratta di un bambino di elemento finder che non può essere creato in questa chiamata). Rimozione di quella parte risolverà il problema.

TL; DR: la seguente riga aprirà un file determinato attraverso un percorso POSIX nel programma predefinito senza ricorrere allo scafo:

tell application "Finder" to open POSIX file "/Users/xxx/my/file/to/open.xyz" 

Avvertimento: questa è la soluzione più semplice , ma funzionerà solo per percorsi POSIX qualificati (cioè quelli che iniziano con /), come quello nella domanda. Gestione di quelli relativi (ad es.percorsi che iniziano con ~, . o ..) OTOH ha bisogno dell'API di AppleScript-ObjectiveC (non esattamente banale) o della shell (divertiti con le tue quotazioni).

+1

Un altro modo per dirla è che non comunichi alle applicazioni di aprire documenti, digli di aprire i file. "Documento" e "finestra" esistono solo in memoria e vengono creati come risultato dell'apertura di un file. –

+0

@kopischke, come si usa il 'file POSIX aperto 'rispetto a' ~ '? –

+0

No, i percorsi POSIX di AppleScript funzionano solo come percorsi qualificati, poiché la coercizione del percorso HFS è piuttosto ingenua (cioè converte '~/my/path' in': ~: my: path'). Se hai bisogno di percorsi POSIX relativi, puoi approfondire l'API di AppleScript-ObjectiveC, che è fuori dall'ambito di un commento, o shell out, che è stata descritta in altre risposte. Dato che la domanda dell'OP ha specificato un percorso completo, la mia risposta è valida, ma aggiungerò un disclaimer. – kopischke

0

Prova:

set dstfile to "~/xxx/my/file/to/open.xyz" 
do shell script "open " & dstfile & "" 
+0

Abbassati: raccomando vivamente di evitare questa soluzione. È fragile, lento e completamente inutile. Usa la risposta di @kopischke: http://stackoverflow.com/a/10132641/754997 –