2012-11-07 88 views
0

我一直在试图让系统事件重复的AppleScript中的文件和我已经没有:)最后我总是得到错误“错误‘的文件不能被复制。’号-1717”。所以我改变了我的策略,并尝试使用Finder来确定我想要做的是正确的。这里是工作的代码:AppleScript中的系统事件是否支持复制文件?

告诉应用程序“系统事件”

set desktopFolder to (path to desktop folder) as string 
set fullPath to desktopFolder & "Temp Export From DO" 

set theDOEntries to every file of folder "/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries" whose name extension is "doentry" 
repeat with DOEntry in theDOEntries 
    set source to path of DOEntry 
    log "Source file: " & source 
    set destination to fullPath as string 
    log "Destination folder: " & destination 
    tell application "Finder" 
     duplicate file source to folder destination with replacing 
    end tell 
end repeat 

末告诉

如果我删除最后一个知道的,所以它使用的系统事件,我得到了同样的错误注意以上。系统事件标准套件的字典有一个“重复”命令,所以我不确定这里发生了什么。此外,“学习的AppleScript,第三版”从A按指出:

“的系统活动的一个特别恼人的遗漏是,它尚不能复制文件和文件夹;如果你需要做到这一点,Finder是你最好的选择“。

第三版是从2010年开始这似乎是,即使在山狮这仍然是正确的。任何人都可以确认吗? 1717错误号列出其他地方作为处理程序错误,我不使用处理程序。

回答

0

尝试:

tell application "Finder" to set desktopFolder to (path to desktop folder as text) & "Temp Export From DO" as alias 
tell application "System Events" to set theDOEntries to every file of folder "/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries" whose name extension is "doentry" 
repeat with DOEntry in theDOEntries 
    log "Source file: " & DOEntry 
    log "Destination folder: " & desktopFolder 
    tell application "Finder" to duplicate file DOEntry to desktopFolder with replacing 
end repeat 

如果您不需要记录,你可以简单地值:

tell application "Finder" to set desktopFolder to (path to desktop folder as text) & "Temp Export From DO" as alias 
tell application "System Events" to set theDOEntries to every file of folder "/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries" whose name extension is "doentry" 
tell application "Finder" to duplicate theDOEntries to desktopFolder with replacing 

或者:

set desktopFolder to quoted form of (POSIX path of (path to desktop folder as text) & "Temp Export From DO") 
do shell script "find '/Users/jkratz/Dropbox/Apps/Day One/Journal.dayone/entries' -name \"*.doentry\" -type f -print0 | xargs -0 -I {} cp -a {} " & desktopFolder 

再回到你的问题,重复命令会创建Finder项目的重复项。您可以使用系统事件重复Finder项是这样的:

tell application "Finder" 
    set myFile to file ((path to desktop as text) & "Test File.txt") 
    set myFolder to folder ((path to desktop as text) & "Test Folder") 
end tell 

tell application "System Events" 
    duplicate myFile to myFolder 
end tell 
+0

感谢您的答复,但你的代码看起来几乎相同的挖掘虽然有点短。我想我的主要问题不是如何让某些东西工作......正如我注意到我的代码有效。我的问题是系统事件是否真的允许文件的复制和基于我贴引用这本书,我的实验,它不即使“法”存在。 – jkratz

+0

见我的编辑.... – adayzdone

+0

甜。谢谢。看起来我缺少的是创建路径时的“文件”和“文件夹”对象。显示我对applescript的理解程度。看似无穷无尽的方式需要做大量的试验和错误。 – jkratz

0

不幸的是,你不能重复使用系统事件的文件 - 你必须使用Finder。即使在adayzdone提供的答案中,系统事件实际上并没有处理重复。

这看起来像它的工作(因为它是一个系统内的事件告诉块)...

tell application "System Events" 
    duplicate myFile to myFolder 
end tell 

...但如果你检查事件日志,你会看到Finder是实际执行复制。在幕后,您将两个Finder对象传递给系统事件。系统事件不知道如何处理Finder对象,因此执行被传递给对象的所有者Finder,Finder执行该命令。

对于AppleScript的文件复制,你是不幸的是限于使用Finder或通过do shell script命令行。

相关问题