2010-11-12 121 views
2

我已經在一個applescript文檔中讀到 - 'alias'是一個關鍵字,指示在編譯(即檢查語法)之後,腳本應該記住文件的ID,並且在執行時應該不要求Finder在定義的路徑所指定的位置存在文件,而是根據ID。關於別名的疑問

所以我決定發揮它使用這個腳本 -

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 

它的成立像你這樣的,但腳本重複每隔30秒鐘(保存爲「保持開放」得到這個行爲)。如果關閉文件然後再移動它,腳本將在下一次迭代中找到該文件。如果您重命名文件,它也會找到它。

這是因爲腳本不必重新解釋原始文件路徑。它使用保存的別名,即使文件移動或重命名,它也會保留自己。

一旦它必須返回到腳本文本,它將失敗;即使在「屬性」變化的情況下,如果我再次在AppleScript編輯器中打開腳本,鏈接將會中斷,因爲它會嘗試重新解釋原始的,現在不正確的路徑。

+0

thanx for the solution and its wonderful explanation :) – Devarshi 2010-11-15 12:12:04

0

的文件是錯誤的,或者至少措辭不當。 Applescript應用程序不會在運行時間之間保存該信息;我不知道任何可以保存這些信息的應用程序,除非開發人員明確這樣做。

如果位置是硬編碼的,並且腳本在調用別名時文件位於正確的位置,那麼您可以將該別名移動到任何位置,這樣就可以了。同時,重命名文件會導致後續操作失敗,這就是爲什麼我認爲文檔措辭不佳。最後,一旦你退出,所有這些信息都會消失。

我在腳本中始終使用alias,但我從來沒有見過它在運行時間間自動「管理」文件位置。我總是必須在腳本中指定的確切位置具有文件。