OS X 10.9 Applescript更改:使用"系统事件"中的`move`命令移动文件的上下文

时间:2014-04-01 17:12:13

标签: applescript osx-mavericks move file-move

我去运行一个旧脚本,它在10.9更新后崩溃了。我曾经使用以下代码移动带有系统事件的文件。

set Somefilepath to "Design_005_HD:Users:Design_005:Desktop:Start:TextFile.txt"
set somefolderpath to "Design_005_HD:Users:Design_005:Desktop:End:"

tell application "System Events"
move file (Somefilepath) to folder (somefolderpath)
end tell

现在它给了我以下错误。

  

错误“系统事件出错:无法生成文件   “Design_005_HD:用户:Design_005:桌面:开始:TextFile.txt”进入   输入整数。“从文件中输入-1700   “Design_005_HD:用户:Design_005:桌面:开始:TextFile.txt”为整数

我知道我可以换掉它并使用finder但我宁愿不使用它。改变了什么不再有效?

更新4/2/14

我已经尝试过将文件/文件夹位置提供给系统事件的各种方法,但它不起作用。我很高兴不能让我无法工作。如果我找到答案或进行了工作更新,我会更新这篇文章。

2014年4月3日更新

这似乎只是系统事件无法移动文件的错误。我在这里报告了http://bugreport.apple.com/,其他人也应该这样做。

请不要把我的代码牢记在心,当我无法让它工作时,它就是最终结束的地方。我有10.8.5的工作代码,它是上面显示的减去系统事件tell块中的文件夹标记。不知道为什么它与文件夹标签一起工作但它确实如此。测试多个comps。如果没有破坏,不要大惊小怪。注意到并继续前进。

2014年10月20日更新

对任何有兴趣的人。我收到一封电子邮件,说明我的机票已关闭/已解决。所以小牛队永远都会被打破,但是当约塞米蒂出来时可能会有光明。

3 个答案:

答案 0 :(得分:3)

通常,Applescript使用冒号分隔的路径(:)而不是斜杠分隔的路径(/)。我总的说是因为一些应用程序可以使用斜杠,但所有程序都可以使用冒号。有关冒号路径的示例,请尝试使用此代码并查看结果...

set colonPath to (path to desktop as text) & "untitled folder 2:"

首先我将你的斜杠转换为冒号样式。

同样对于AppleScript,这些只是字符串而不是路径。为了使AppleScript理解它们是我们可以做一些事情的路径。首先,您可以根据需要在它们前面添加单词文件或文件夹。我在您的代码中注意到您正在使用" file"在文件字符串前面,但你没有使用"文件夹"在文件夹字符串前面。所以试试吧。其次你可以使用"别名"在字符串前面,无论是文件还是文件夹。还有其他方法,但我会在这里停下来。这两种方式都应该有效。

UPDATE :上述所有内容都表示,10.9中的系统事件似乎仍然存在移动命令的问题。因此,这里有2个替代方案。我使用了斜线样式路径,因为那是你正在使用的东西。

set somefilepath to POSIX file "/Users/Design_005/Desktop/Start/TextFile.txt"
set somefolderpath to POSIX file "/Users/Design_005/Desktop/End"

tell application "Finder"
    move somefilepath to somefolderpath
end tell

set somefilepath to "/Users/Design_005/Desktop/Start/TextFile.txt"
set somefolderpath to "/Users/Design_005/Desktop/End"

do shell script "mv " & quoted form of somefilepath & space & quoted form of somefolderpath
祝你好运。

答案 1 :(得分:1)

你做不到。系统事件可以删除和打开,但不能移动。这是一个简单的例子,以防其他人在未来的操作系统中找到更好的答案。系统事件似乎与删除和打开的处理方式不同。

tell application "System Events"
    set myFile to file "Macintosh HD:Users:velma:Desktop:Test.png"
    set myFolder to folder "Macintosh HD:Users:velma:Desktop:Test"

    --delete works! with both type “file/folder” and type “disk item”
    --delete myFile
    --delete myFolder

    --open works!
    open myFile
    open myFolder

    --move fails!
    move myFile to myFolder
end tell

在这种情况下,它返回的错误是“无法获取文件”,编号为-1728。

答案 2 :(得分:0)

move中的"System Events"上下文中OX 10.9命令中似乎有错误(可能还有10.8)。

解决方法是改为使用"Finder"上下文:

使用 HFS样式路径(分隔符为:

set somefilepath to "Design_005_HD:Users:Design_005:Desktop:Start:TextFile.txt"
set somefolderpath to "Design_005_HD:Users:Design_005:Desktop:End:"

tell application "Finder"
    move file somefilepath to folder somefolderpath
end tell

使用 POSIX样式路径(分隔符为/) - 与原始问题一样

set somefilepath to "/Users/Design_005/Desktop/Start/TextFile.txt"
set somefolderpath to "/Users/Design_005/Desktop/End"

# Note that we use `as POSIX file` even in the case of the *folder*
# - this works, however.
tell application "Finder"
    move somefilepath as POSIX file to somefolderpath as POSIX file
end tell

注意:

  • as POSIX file会在两个个案例中返回file个对象,但Finder仍会正确处理此移动 - 可以同时使用POSIX file文件文件夹
  • 请注意,使用POSIX file前缀形式 - 例如POSIX file "/Library",仅适用于路径字符串 literal ;如果你试图将路径字符串构建为表达式,它会中断(在" Finder"上下文中,但不在AppleScript上下文中(!)):POSIX file ("/" & "Library") - 相反,{{1工作(在两种情况下) - 去图。 为安全起见,请始终使用后缀表单:"/" & "Library" as POSIX file
  • 使用... as POSIX file - 至少从OS X 10.9开始 - 的一个缺点是,如果文件/文件夹不存在,错误消息是神秘的:你&#39 ;请看as POSIX fileFinder got an error: Handler can’t handle objects of this class. - 两者都有Finder got an error: AppleEvent handler failed.
  • (将-10000 直接与POSIX路径一起使用,就像问题的早期版本一样 - 例如,folder - 仅适用于一个folder "/Library"上下文,因此不是"System Events"上下文中的选项。)

AppleScript OS X 10.9中的更改内容:

您看到的行为似乎是一个错误(另见@Jerry Stratton的回答); AppleScript release notes for 10.9中没有任何内容表示该区域发生了变化。

我现在认为该问题也会影响OS X 10.8。

我鼓励您在http://bugreport.apple.com向我们提交错误报告,就像我已经拥有的那样。

可悲的是,处理AppleScript中的文件,文件夹和别名一直是一团糟,混淆源自不同字典(AppleScript本身,系统事件,Finder)的同名类,行为略有不同。

一般建议:对于文件系统操作,请使用"Finder"上下文

{Disk}文件套件中的tell application "Finder"字典重复部分Finder的文件系统操作功能,但只有部分 - 例如,一个奇怪的遗漏是文件 "System Events" 命令。