2012-02-15 43 views
1

在安裝了多個InDesign的情況下,ScriptEditor會盡力確定腳本應運行在哪個版本上。不過,我正在幹我的腳本,這樣我只需在整個腳本中更改應用程序名稱一次。AppleScript將應用程序分配給變量

還有一個類似的問題(Applescript path to application using variable),但這並不適用於一切。問題是,爲什麼這不適用於一切?

預期以下工作:

tell application "Adobe InDesign CS5.5" 
    log name --"Adobe InDesign CS5.5.app" 
    log full name --"Mactastic:Applications:Adobe InDesign CS5.5:Adobe InDesign CS5.5.app:" 
end 

稍加晾曬行動:

set v to "Adobe InDesign CS5.5" 
set a to application v 
log name of a --"Adobe InDesign CS5.5" 
log full name of a 
--SYNTAX ERROR: Expected end of line, etc. but found property 
--"name" is highlighted in the ScriptEditor 

這是因爲預期中的另一種例子:

set f to (choose file) 
tell application "Adobe InDesign CS5.5" 
    open f without showing window 
end tell 

然而,這未能像以前一樣編譯:

set f to (choose file) 
set v to "Adobe InDesign CS5.5" 
set a to application v 
tell a 
    open f without showing window 
end 
--SYNTAX ERROR: Expected 「given」, 「with」, 「without」, other parameter name, etc. but found class name. 
--"window" is highlighted in the ScriptEditor 

我的環境:

  • OSX 10.6.8
  • ScriptEditor 2.3(118)
  • AppleScript的2.1.2

編輯:在該遊戲結束是我是希望將一些InDesign功能抽象到我自己的類中,如下所示:

InDesign.scpt - a類抽象的InDesign功能

on new() 
    copy me to self 
    --do some initializing 
    return self 
end new 

on _version() 
    return "Adobe InDesign CS5.5" 
end _version 

on _application() 
    return application _version() 
end _application 

on _open(path) 
    tell _application() to open path without showing window 
end _open 

my_script.scpt - 使用抽象InDesign.scpt上述

set InDesign to (load script file ("my:path:to:scripts:" & "Indesign.scpt"))'s new() 
InDesign's _open("my:path:to:indd:file.indd") 

這是一個很好的機會,上面是不是真的有可能在的AppleScript和的ObjectiveC是我應該正在尋找做這種類型的事情。然而,似乎某些事情確實像「tell _application()打開路徑」,但「tell _application()打開路徑而不顯示窗口」不行。

+0

這似乎是一個編譯問題,用於引用對象以外的對象。奇怪的是,如果屬性或命令不止一個單詞,它就不能編譯。如果屬性/命令是一個單詞,則編譯並因此執行成功。 – spyle 2012-02-21 19:46:01

+0

可以使用'運行腳本'([見這篇文章](http://www.mactipper.com/2008/10/run-applescript-in-applescript.html)),但代碼看起來很糟糕,然後會很難調試。 – spyle 2012-02-21 19:47:34

回答

1

如何:

set theApplication to "Adobe InDesign CS5.5" 

using terms from application "Adobe InDesign CS5.5" 
    tell application theApplication 
     --do your thing here 
    end tell 
end using terms from 

的使用條款從被用來讓一個腳本編譯在你告訴應用程序theApplication塊,否則什麼也不會編譯爲InDesign的具體。當應用程序(當應用程序是webservice或遠程機器時)不存在或在編譯時不可訪問時,使用條款是很常見的。

+0

從'語句中使用條件似乎不接受變量作爲它的參數。只要傳遞除了文字「應用程序」ApplicationName「之外的任何東西,它就無法編譯,返回錯誤」無法將某些數據轉換爲預期的類型。「 – fanaugen 2012-02-16 11:10:07

+1

就像我說過的:如果應用程序無法編譯,但應該可以運行,則應該使用術語。就像您對腳本編輯器所說的那樣:」不要擔心,因爲在運行時使用此應用程序的腳本定義一切都會好起來的。「。所以是的,你不能使用變量來使用條件。 – 2012-02-16 12:50:33