2015-12-01 54 views
0

我有「資源」文件夾中的腳本文件,我想這樣的不能讓「路徑」爲實型

set scriptpath to (path to current application as text) 
set scripty to do shell script scriptpath/Contents/Resources/moveskript & variable1 & variable2 with administrator privileges 

運行它,但它告訴我:

2015-12-01 12:19:47.208 Move[16404:534222] *** -[AppDelegate mybuttonhandler:]: Can’t make "(path.app):" into type real. (error -1700) 

回答

1

兩個問題:

  • 你混淆了HFS路徑(冒號分隔)和POSIX路徑(斜線隔開)
  • current application是當前的AppleScript運行程序,而不是當前的腳本/應用程序。

使用Cocoa方法獲取資源文件夾的路徑。

set resourceFolder to current application's NSBundle's mainBundle's resourcePath() 
set scriptpath to (resourceFolder's stringByAppendingPathComponent:"moveskript") as text 
set scripty to do shell script quoted form of scriptpath & space & quoted form of variable1 & space & quoted form of variable2 with administrator privileges 

考慮到殼參數必須由空格字符的參數範圍內進行分離和空格字符(scriptpathvariable1variable1variable2之間)必須轉義。

+0

我混淆了它們,因爲我沒有能夠運行'set scripty來執行shell腳本「scriptpath ...」'因爲它沒有讀取'scriptpath'作爲變量。但用你的腳本,我反而得到這個: '2015-12-01 13:41:16.501移動[39067:617575] *** - [AppDelegate mybuttonhandler:]:無法使«class ocid»id«數據optr000000004014020000600000»轉換爲類型常量。 (錯誤-1700)' – DisplayName

+0

我明白,你在談論一個AppleScriptObjC應用程序。當您將Cocoa對象傳遞給AppleScript時,發生'«class ocid»'錯誤。你必須強迫它AppleScript理解的東西。變量1和變量2是什麼類型的? – vadian

+0

@vadlan他們都來自可可文本字段的路徑。 – DisplayName

0

你的問題是這樣的部分:

... do shell script scriptpath/Contents/Resources/moveskript ... 

要連接一個字符串到一個變量,你需要換行字符串中引號和使用&

do shell script scriptpath & "/Contents/Resources/moveskript" 

因爲斜槓是不在引號內,Applescript將它們識別爲分割符號,因此它認爲您正試圖將scriptpath除以Contents。這就是爲什麼它試圖將scriptpath變量強制爲real類型。但是,由於它是一個帶有字母的字符串,Applescript無法將其轉換。

+0

我總是這樣想,但我不知道如何在這種情況下使用變量,但結果如往常一樣。 – DisplayName