AppleScript: "exists" restituisce true ogni volta

3

Su ogni exists in AppleScript il risultato è vero. Ad esempio:

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

Il risultato è

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"}

Questo percorso non esiste quindi dov'è l'errore? È un mio errore o è un bug in AppleScript?

Grazie per l'aiuto.

    
posta user121028 04.07.2015 - 09:25
fonte

1 risposta

2

Non sono per niente un esperto di Applescript, ma questo è ciò che ho raccolto dal mio stesso imbarazzo nel corso degli anni.
Apprezzerei correzioni se ci sono inesattezze, o metodi migliori ... ma con un po 'perché funziona' per i neofiti; -)

Quello che stai facendo in realtà è chiedere a Script Editor se la stringa "/Users/[User]/skfhshfkh/hfjhsfhsj/" esiste ... cosa che fa, hai appena detto che ha funzionato ;-)
Script Editor non sa cosa sia un file, né come cercarne uno, quindi considera la stringa come una stringa e non come un percorso.

Il modo più semplice per farlo è utilizzare il Finder o gli eventi di sistema che hanno la loro routine "esistente".

In questo primo esempio, puoi inserire come file POSIX o solo file, & regola di conseguenza la sintassi.

Quindi, dovrebbe funzionare, per un file ...

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 visualizzazione della finestra di dialogo all'esterno del Finder tell impedisce a Finder di arrivare in primo piano solo per presentarlo.

In alternativa, puoi impostare il tuo percorso al di fuori della funzione stessa.
Questo sarebbe il mio metodo preferito, & utilizza System Events invece di Finder ...

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

Si noti che usando System Events, deve porre la finestra di dialogo all'esterno del tell, poiché System Events non visualizzerà la finestra di dialogo stessa.

In uno di questi esempi, prova ad iniziare con un file POSIX & tentare di concatenare il percorso aggiuntivo usando & "Folder:" & "Filename" non farà quello che ti aspetti.
Questo è un punto su cui non so perché non lo fa, ma non lo è.

Un'ultima nota: se stai cercando un file , allora tutto il lavoro sopra.
Se stai cercando un folder , utilizza questo ...

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
    
risposta data 04.07.2015 - 13:02
fonte

Leggi altre domande sui tag