4

我去运行一个旧脚本,它在 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:Users:Design_005:Desktop:Start:TextFile.txt\" 转换为整数类型。” 数字 -1700 从文件“Design_005_HD:Users:Design_005:Desktop:Start:TextFile.txt”到整数

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

2014 年 4 月 2 日更新

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

2014 年 4 月 3 日更新

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

请不要把我的代码放在心上,当我无法让它工作时,事情就结束了。我有 10.8.5 的工作代码,它是上面显示的内容减去系统事件告诉块中的文件夹标签。不知道为什么它可以在没有文件夹标签的情况下工作,但确实可以。在多个组合上进行了测试。如果它没有损坏,请不要大惊小怪。注意到它并继续前进。

2014 年 10 月 20 日更新

对于任何有兴趣的人。我收到一封电子邮件,说明我的票已关闭/解决。所以小牛队将永远被打破,但当它出现时,优胜美地可能会有光明。

4

3 回答 3

3

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

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

因此,首先我会将您的斜杠转换为冒号样式。

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

更新:综上所述,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

祝你好运。

于 2014-04-01T18:06:32.150 回答
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。

于 2014-04-01T22:03:07.720 回答
0

在(并且可能)的上下文中,命令中似乎存在错误。move"System Events"OX 10.910.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 样式的路径(分隔符 is /) - 与原始问题一样

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",仅适用于路径字符串文字;如果您尝试将路径字符串构建为表达式,它会中断(在“Finder”上下文中,但不在 AppleScript 上下文中(!)):POSIX file ("/" & "Library")- 相比之下,"/" & "Library" as POSIX file工作(在两个上下文中) - 去图。为了安全起见,请始终使用后缀形式:... as POSIX file
  • 使用的一个缺点as POSIX file——至少从 OS X 10.9 开始——是如果文件/文件夹不存在,错误消息是神秘的:你会看到Finder got an error: Handler can’t handle objects of this class.Finder got an error: AppleEvent handler failed.- 都带有 number -10000
  • folder 直接使用 POSIX 路径,如问题的早期版本 - 例如folder "/Library"- 仅适用于"System Events"上下文,因此不是"Finder"上下文中的选项。)

至于 AppleScript OS X 10.9 的变化:

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

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

我鼓励您通过http://bugreport.apple.com向 Apple 提交错误报告,就像我已经提交的那样。

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

一般建议:对于文件系统tell application "Finder"操作使用context

"System Events"字典在其磁盘文件夹文件套件中复制了 Finder 的一些文件系统操作功能,但只有一些功能——例如,一个奇怪的遗漏是文件copy命令。

于 2014-04-01T21:37:30.547 回答