2012-04-12 14 views
8

En un AppleScript, recibo un archivo que tengo que abrir.Applescript: ¿Cómo abrir un archivo con el programa predeterminado?

La ruta del archivo tiene el formato "/Users/xxx/my/file/to/open.xyz".

Quiero abrirlo con el programa predeterminado. Si se trata de un AVI, necesito abrirlo con un programa de vídeo, si es un xls, con Excel, ...

He intentado varias cosas sin ningún éxito:

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

-> I' m consiguiendo el error 1728, que me dice que él no era capaz de conseguir el documento

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

-> lo mismo digo

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

- > Lo mismo digo

Estoy seguro de que el archivo existe, porque hago esto antes de que esta ejecución de código:

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

no puedo utilizar el open.xyz synthax de a de ... porque recibo esto como un parámetro.

Por favor, ayuda estoy desesperado: '(

respuesta: Sobre la base de las respuestas, que terminan con esto:

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

Le recomiendo que evite esta solución. Es frágil, más lento y completamente innecesario. Use la respuesta de @kopischke: http://stackoverflow.com/a/10132641/754997 –

Respuesta

14

Su problema aquí es doble:

  1. su camino está en la notación POSIX, que AppleScript no puede coaccionar a un alias de o archivo objeto aceptable para el Finder, ya que éstas sólo serán implícitamente creados a partir de cadenas de ruta en notación HFS (Users:xxx:my:file:to:open.xyz). Declarar expresamente su ruta como archivo POSIX resolverá esto. Sin embargo,
  2. su llamada al Buscador de prefijos documento a la ruta, pero el diccionario de AppleScript del Buscador no contiene una documento tipo de objeto (hay un archivo objeto documento, pero es un hijo del elemento buscador que no puede ser creado en esta llamada). Eliminar esa parte resolverá el problema.

TL; DR: la línea siguiente se abrirá un archivo dado a través de una ruta de acceso POSIX en el programa predeterminado sin recurrir a la shell:

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

Advertencia: esta es la solución más simple , pero solo funcionará para rutas POSIX calificadas (es decir, aquellas que comienzan con /), como la de la pregunta. Manejo de los relativos (es decirrutas que comienzan con ~, . o ..) OTOH necesita ya sea la API AppleScript-ObjectiveC (no exactamente trivial) o el shell (diviértase con sus presupuestos).

+1

Otra forma de decirlo es que no le dice a las aplicaciones que abran documentos, les dice que abran archivos. "Documento" y "ventana" solo existen en la memoria y se crean como resultado de abrir un archivo. –

+0

@kopischke, ¿cómo se usa 'abrir archivo POSIX' relativo a' ~ '? –

+0

No, las rutas AppleScript POSIX solo funcionan como rutas calificadas, ya que la coerción de ruta HFS es bastante ingenua (es decir, convierte '~/my/path' en': ~: my: path'). Si necesita rutas POSIX relativas, puede profundizar en la API de AppleScript-ObjectiveC, que está fuera del alcance de un comentario, o en el caso de que se borre, que se ha descrito en otras respuestas. Como la pregunta de OP especificaba una ruta totalmente calificada, mi respuesta sigue en pie, pero agregaré un descargo de responsabilidad. – kopischke

0

Probar:

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

Votación descendente: Le recomiendo que evite esta solución. Es frágil, más lento y completamente innecesario. Utilice la respuesta de @kopischke: http://stackoverflow.com/a/10132641/754997 –

Cuestiones relacionadas