AppleScript: 'existe' devuelve true cada vez

3

En cada exists en AppleScript el resultado es verdadero. Por ejemplo:

set a to (POSIX path of (((path to home folder from user domain) as text) & "skfhshfkh:" & "hfjhsfhsj:"))
if exists a then
    display dialog "AppleScript returns a wrong worth ..."
end if

El resultado es

tell current application
    path to home folder from user domain
        --> alias "Macintosh HD:Users:[User]:"
end tell
tell application "Script Editor"
    exists "/Users/[User]/skfhshfkh/hfjhsfhsj/"
        --> true
    display dialog "AppleScript returns a wrong worth ..."
        --> {button returned:"OK"}
end tell
Ergebnis:
{button returned:"OK"}

Este camino no existe, ¿dónde está el error? ¿Es mi error o es un error en AppleScript?

Gracias por cualquier ayuda.

    
pregunta user121028 04.07.2015 - 09:25

1 respuesta

2

No soy para nada un experto en Apple, pero esto es lo que he extraído de mis propios esfuerzos a lo largo de los años.
Apreciaría las correcciones si hay alguna inexactitud, o mejores métodos ... pero con un poco de "por qué funciona" para los novatos ;-)

Lo que estás haciendo en realidad es preguntar al Editor de secuencias de comandos si existe la cadena "/Users/[User]/skfhshfkh/hfjhsfhsj/" ... lo que hace, simplemente le dijiste que sí ;-)
Script Editor no sabe qué es un archivo ni cómo buscarlo, por lo que trata la cadena como una cadena, no como una ruta.

La forma más sencilla de hacerlo es utilizar el Finder o los eventos del sistema, que tienen su propia rutina 'existe'.

En este primer ejemplo, puede ingresar como archivo POSIX o solo archivo, & ajusta tu sintaxis en consecuencia.

Por lo tanto, esto debería funcionar, para un archivo ...

set msg to "No sign of it"
tell application "Finder"    
    --if exists POSIX file "/volumes/MacintoshHD/Users/[user]/Desktop/testFile.rtf" then
    --or
    --if exists file ((path to home folder as text) & "Desktop:" & "testFile.rtf") then
    --or
    --if exists file "MacintoshHD:Users:[user]:Desktop:testFile.rtf" then
    --but NOT
    --if exists POSIX file ((path to home folder as text) & "Desktop:" & "testFile.rtf") then
        set msg to "Yeah, found it!"
    end if
end tell

display dialog msg

La visualización del cuadro de diálogo fuera del Finder tell evita que Finder aparezca en la parte frontal solo para presentarlo.

Alternativamente, puede establecer su ruta fuera de la propia función existente.
Este sería mi método preferido, & utiliza los eventos del sistema en lugar del buscador ...

set theFile to ((path to home folder as text) & "Desktop:" & "testFile.rtf")
set msg to "No sign of it."

tell application "System Events"
    if exists file theFile then
        set msg to "Yeah, found it!"
    end if
end tell

display dialog msg

Tenga en cuenta que al usar System Events, usted debe colocar el cuadro de diálogo fuera del tell, ya que System Events no mostrará el cuadro de diálogo en sí.

En cualquiera de estos ejemplos, intentar comenzar con un archivo POSIX & intentar concatenar la ruta adicional utilizando & "Folder:" & "Filename" no hará lo que espera.
Este es un punto en el que no sé por qué no, pero no lo hace.

Una última nota: si está buscando un file , entonces todo lo anterior funciona.
Si está buscando un folder , entonces use esto ...

set theFolder to ((path to home folder as text) & "Desktop:" & "testFolder:")
set msg to "No sign of it."

tell application "System Events"
    if exists folder theFolder then
        set msg to "Yeah, found it!"
    end if
end tell

display dialog msg
    
respondido por el Tetsujin 04.07.2015 - 13:02

Lea otras preguntas en las etiquetas