2010-11-12 42 views
2

J'ai lu dans un document applescript que - 'alias' est un mot-clé indiquant que, après la compilation (c.-à-d. Vérification de la syntaxe), le script devrait se souvenir de l'ID du fichier et, lors de l'exécution, ne pas demander au Finder un fichier à l'emplacement spécifié par le chemin défini, mais basé sur l'ID.Doute concernant l'alias

ai donc décidé de jouer avec l'aide de cette Script-

set samplePath to alias "Mac:Miraaj:eCBTMood:anim1.png" 
tell application "Finder" 
    open samplePath 
end tell 

J'ai compilé ce script et enregistré comme une application AppleScript. Je l'ai exécuté en double cliquant dessus et il a ouvert le bon fichier. Puis j'ai changé le nom du fichier en anim2.png, et ré-exécuté l'application. Je pensais que ce devrait à nouveau ouvrir le même fichier, mais lui a donné cette erreur:

File Mac:Miraaj:eCBTMood:anim1.png was not found

Quelqu'un peut-il me suggérer si je l'ai fait quelque chose de mal ou interprété « alias » à tort?

Merci,

Miraaj

Répondre

2

Cela fonctionnera si vous définissez l'alias en tant que propriété plutôt qu'en tant que simple variable.

J'ai copié votre script et dupliqué le comportement que vous avez remarqué: si le fichier est déplacé ou renommé, le script ne le trouve plus.

J'ai alors modifié le script à:

property samplePath : alias "Mimosa:Users:jerry:Desktop:Lost Cities" 
tell application "Finder" 
    open samplePath 
end tell 

Maintenant, l'application de script a pu trouver le fichier sur le déplacer. Et il était capable de trouver le fichier quand je l'ai renommé. La différence, je pense, est que les propriétés sont enregistrées dans les applications sur save et entre les instances, mais des variables simples doivent être recréées à chaque fois à partir du chemin d'origine, ce qui ne fonctionnera pas si le chemin original échoue.

Tenir compte de cette variation:

set samplePath to alias "Mimosa:Users:jerry:Desktop:Lost Cities" 

on idle 
    global samplePath 
    tell application "Finder" 
     open samplePath 
    end tell 
    return 30 
end idle 

Il est mis en place comme le vôtre, mais le script répète toutes les trente secondes (l'enregistrer comme « rester ouvert » pour obtenir ce comportement). Si vous fermez le fichier, puis le déplacez, le script trouvera le fichier à l'itération suivante. Il le trouvera également si vous renommez le fichier. Ceci est dû au fait que le script n'a pas besoin de réinterpréter le chemin du fichier d'origine.Il utilise l'alias enregistré, qui se maintient même si le fichier se déplace ou est renommé.

Dès qu'il doit revenir à votre texte de script, il échouera; même avec la variation "property", le lien sera rompu si j'ouvre à nouveau le script dans AppleScript Editor, car il essaye alors de réinterpréter le chemin d'origine, maintenant incorrect.

+0

merci pour la solution et sa merveilleuse explication :) – Devarshi

0

La documentation est fausse, ou au moins mal formulée. Les applications Applescript ne vont pas enregistrer cette information entre les temps d'exécution; Je ne connais aucune application qui enregistrerait cette information à moins que le développeur ne le fasse explicitement.

Si l'emplacement est codé en dur et que le fichier est à l'emplacement correct au moment où le script appelle l'alias, vous pouvez déplacer cet alias vers n'importe quel emplacement et tout ira bien. Dans le même temps, renommer le fichier entraînera l'échec des opérations suivantes, et c'est pourquoi je pense que les docs sont mal rédigés. En fin de compte, une fois que vous quittez, toute cette information disparaît. J'utilise alias tout le temps dans mes scripts, mais je ne l'ai jamais vu "automagiquement" gérer les emplacements de fichiers entre les runtimes. Je dois toujours avoir des fichiers à l'emplacement exact spécifié dans le script.