2014-07-06 101 views
0

我想使用AppleScript和tag將指定標籤分配給Finder(OS X 10.9.4)中的選定文件,但我在將文件路徑傳遞給標籤時遇到問題。用AppleScript更改Finder標籤

tell application "Finder" 
    try 
     repeat with currentFile in items of (get selection) 
      if label index of currentFile is 0 then 
       do shell script ("/usr/local/bin/tag -a 'foo' " & currentFile) 
      else 
       set label index of currentFile to 0 
      end if 
     end repeat 
    on error e 
     return e 
    end try 
end tell 

如果我有/Users/fort/bar.txt在Finder中選定的,我得到以下錯誤:

"tag: The file 「/Users/fort/bar.txt」 couldn’t be opened because there is no such file." 

但是,下面的代碼不會改變指定文件的標籤foo

set myFile to "/Users/fort/bar.txt" do shell script ("/usr/local/bin/tag -a 'foo' " & myFile)

任何想法爲什麼currentFile未被傳遞給tag可以解析嗎?謝謝。

+0

是確切的錯誤你是得到? – mcgrailm

+0

我錯誤地添加了引號,並且我的Mac HD(這是MBA)的名稱應該被預置爲該路徑。顯然,文件名是由它組成的。所以,確切的錯誤應該是這樣的:'tag:文件「MBA/Users/fort/bar.txt」無法打開,因爲沒有這樣的文件。「 – fort

回答

2

這是一個路徑問題,就必須查找項目轉換爲字符串,並轉換HFS路徑的POSIX路徑

試試這個

tell application "Finder" 
    repeat with currentFile in (get selection) 
     tell currentFile 
      if label index is 0 then 
       my tagCmd(it as text) -- convert Finder item e.g. file "bar.txt" of folder "fort" of.... --> "MBA:Users:fort:bar.txt」 (path with colon) 
      else 
       set label index to 0 
      end if 
     end tell 
    end repeat 
end tell 

on tagCmd(f) 
    do shell script "/usr/local/bin/tag -a 'foo' " & quoted form of POSIX path of f -- posix path convert path with colon to use in shell 
end tagCmd 
+0

工作,謝謝@ jackjr300!唯一不起作用的是標籤切換,但這並不重要,因爲我製作了另一個刪除所有標籤的腳本。 – fort