2013-09-27 159 views
2

我試圖在AppleScript中獲取文件的最後修改日期。我以爲我已經使用這個工作:在AppleScript中獲取文件的最後修改日期

set thePath to (((path to documents folder) as text) & "speed.txt") 
set modDate to modification date of file thePath 

,這似乎返回一個有效的值,但是當我把這個一個on idle片的代碼裏面我得到一個:

「不能得到的......」錯誤

類<>我看到別的地方建議使用:

set the modDate to (do shell script "mdls -name kMDItemLasUsedDate " & quoted form of the POSIX path of thePath) 

但這返回null。關於如何獲得修改日期的任何想法?

+1

它必須AppleScript的?你可以很容易地使用stat filename – michael501

+1

FYI來做到這一點:對於你的shell腳本命令,有一個可以工作的「kMDItemContentModificationDate」。 – regulus6633

回答

4

您需要引用該文件。

嘗試

set thePath to (((path to documents folder) as text) & "speed.txt") 
tell application "System Events" to set modDate to modification date of file thePath 

tell application "System Events" to set thePath to file (((path to documents folder) as text) & "speed.txt") 
set modDate to modification date of thePath 
+1

我建議的唯一調整是告訴應用程序系統事件而不是Finder。一般來說,儘可能避免使用Finder是最好的選擇。因此,既然Finder和System Events都具有「修改日期」屬性,我就會使用後者。 – regulus6633

+1

此外,我很驚訝你的第二個例子工作,因爲「修改日期」不是一個applescript知道的屬性。該屬性被Finder和系統事件所瞭解,因此您應該告訴其中一個應用程序執行該命令。我確實看到,當你使用那些在文件引用結尾處的應用程序創建文件引用時,它包括「應用程序Finder」...我猜這就是爲什麼「修改日期」調用在應用程序之外工作塊。你有不同的解釋嗎? – regulus6633

+1

嗨reg。系統事件更快,並接受posix路徑,所以我會更新答案。 (我有一個腳本調試器擴展,它填充了Finder並且我很懶)。我發現一旦你在Finder或SE中引用了一個文件,你可以在之後將它從一個tell塊中排除。 – adayzdone

相關問題