3 votes

AppleScript : L'option "existe" renvoie toujours la réponse vraie

Sur chaque exists en AppleScript, le résultat est vrai. Par exemple :

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

Le résultat est

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 wrongly returns true ..."
        --> {button returned:"OK"}
end tell
Result:
{button returned:"OK"}

Ce chemin n'existe pas, alors où est l'erreur ? Est-ce mon erreur ou un bug dans AppleScript ?

Merci pour toute aide.

3voto

Tetsujin Points 95239

Je ne suis pas du tout un expert en Applescript, mais c'est ce que j'ai glané en tâtonnant au fil des ans.
J'apprécierais des corrections s'il y a des inexactitudes, ou de meilleures méthodes mais avec quelques "pourquoi ça marche" pour les débutants ;-)

Ce que vous faites en fait, c'est demander à l'éditeur de script si la chaîne de caractères "/Users/[User]/skfhshfkh/hfjhsfhsj/" existe ce qui est le cas, vous venez de lui dire qu'elle existe ;-)
script L'éditeur ne sait pas ce qu'est un fichier, ni comment en chercher un, donc il traite la chaîne comme une chaîne et non comme un chemin.

La façon la plus simple de le faire est d'utiliser le Finder ou les événements système qui ont leur propre routine "exists".

Dans ce premier exemple, vous pouvez saisir soit un fichier POSIX, soit un simple fichier, et adapter votre syntaxe en conséquence.

Donc, cela devrait fonctionner, pour un fichier

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

L'affichage de la boîte de dialogue en dehors de la fenêtre du Finder évite que le Finder ne vienne au devant de la scène pour la présenter.

Vous pouvez également définir votre chemin en dehors de la fonction exists elle-même.
C'est la méthode que je préfère, elle utilise System Events au lieu du 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

Notez qu'en utilisant les événements système, vous doit placer la boîte de dialogue en dehors du récit, car les événements système n'afficheront pas la boîte de dialogue elle-même.

Dans l'un ou l'autre de ces exemples, essayer de démarrer avec un fichier POSIX et tenter de concaténer le chemin supplémentaire en utilisant & "Folder:" & "Filename" ne fera pas ce que vous attendez.
C'est un point sur lequel je ne sais pas por qué ça ne l'est pas, mais ça ne l'est pas.

Une dernière remarque - si vous cherchez un file alors tout ce qui précède fonctionne.
Si vous êtes à la recherche d'un folder alors utilisez ceci

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X