2010-11-12 6 views
2

Я прочитал в документе applescript, что «псевдоним» является ключевым словом, указывающим, что после компиляции (т. Е. Проверки синтаксиса) скрипт должен помнить идентификатор файла и, после выполнения, должен не запрашивать Finder для файла в местоположении, как определено указанным путем, но на основе идентификатора.Сомнение в отношении псевдонима

Поэтому я решил играть с ним, используя этот script-

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

Я собирал этот сценарий, и сохранил его в качестве приложения AppleScript. Я выполнил его, дважды щелкнув по нему, и он открыл правильный файл. Затем я изменил имя файла на anim2.png и повторно выполнил приложение. Я думал, что он должен снова открыть тот же файл, но он дал эту ошибку:

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

Может кто-нибудь предложить мне, если я сделал что-то неправильно или интерпретировать «псевдоним» неправильно?

Спасибо,

Miraaj

ответ

2

Это будет работать, если вы настроите псевдоним как свойство, а не как простую переменную.

Я скопировал ваш скрипт и продублировал поведение, которое вы заметили: если файл перемещен или переименован, сценарий больше не может его найти.

Затем я изменил сценарий, чтобы быть:

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

Теперь приложение сценария удалось найти файл на перемещении. И он смог найти файл, когда я его переименовал.

Разница, я думаю, заключается в том, что свойства сохраняются в приложениях для сохранения и между экземплярами, но простые переменные необходимо воссоздавать каждый раз из исходного пути, что не будет работать, если исходный путь завершился с ошибкой.

Рассмотрим этот вариант:

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 

Это настроить, как ваша, но сценарий повторяется каждые тридцать секунд (сохранить как «Stay Open», чтобы получить такое поведение). Если вы закроете файл и затем переместите его, скрипт найдет файл на следующей итерации. Он также найдет его, если вы переименуете файл.

Это связано с тем, что сценарий не требует повторной интерпретации исходного пути к файлу.Он использует сохраненный псевдоним, который поддерживается, даже если файл перемещается или переименовывается.

Как только он должен вернуться к тексту сценария, он потерпит неудачу; даже с изменением свойства, ссылка будет сломана, если я снова открою скрипт в редакторе AppleScript, так как тогда он попытается переосмыслить исходный, а теперь неверный путь.

+0

thanx для решения и его замечательное объяснение :) – Devarshi

0

документация неправильно, или по крайней мере плохо сформулировано. Приложения Applescript не собираются сохранять эту информацию между временем выполнения; Я не знаю ни одного приложения, которое бы сохраняло эту информацию, если разработчик явно не делает этого.

Если местоположение жестко закодировано и файл находится в правильном месте в момент, когда скрипт вызывает псевдоним, вы можете переместить этот псевдоним в любое место, и все будет в порядке. В то же время переименование файла приведет к сбою последующих операций, и поэтому я думаю, что документы плохо сформулированы. В конце концов, как только вы уйдете, вся эта информация исчезнет.

Я использую alias все время в моих сценариях, но я никогда не видел, чтобы оно «автоматически» управляло расположением файлов между временем выполнения. Я всегда должен иметь файлы в точном месте, как указано в скрипте.