我去运行一个旧脚本,它在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日更新
对任何有兴趣的人。我收到一封电子邮件,说明我的机票已关闭/已解决。所以小牛队永远都会被打破,但是当约塞米蒂出来时可能会有光明。
答案 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"
上下文:
:
)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
/
) - 与原始问题一样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 file
和Finder 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"
命令。