使用Javascript for Automation创建文件副本(Keynote演示文稿)

时间:2015-01-24 18:44:56

标签: keynote javascript-automation jxa

建议创建文件副本并指定新名称的建议方法是什么?

目前我使用:

test = Application("Finder").duplicate(Path("/var/tmp/old.txt"), {replacing:true}) // creates "/var/tmp/old copy.txt"
test.name = "new.txt" // renames it to "/var/tmp/new.txt"

我更愿意在该重复方法中指定输出名称,而不是在之后指定它。 Finder字典说我可以使用:

duplicate specifier : the object(s) to duplicate 
[to: location specifier] : the new location for the object(s)
[replacing: boolean] : Specifies whether or not to replace items in the destination that have the same name as items being duplicated

但是当我尝试以下内容时:

test = Application("Finder").duplicate(Path("/var/tmp/old.txt"), {to:Path("/var/tmp/new.txt"), replacing:true})
  • 如果new.txt尚不存在,我收到消息“错误-1728:无法获取对象”
  • 如果new.txt已存在,则消息为“Error -1700:无法转换类型”

目前尚不清楚“位置说明符”是什么类型。我尝试使用文件夹/文件/文件夹+文件,常规字符串(文件夹/文件/文件夹+文件)。

建议?

1 个答案:

答案 0 :(得分:1)

奇怪的行为,确实...... 我想知道使用Finder的重复处理程序的正确语法,但如果您只需要复制文件,则可以使用doShellScript处理程序:

app = Application.currentApplication()
app.includeStandardAdditions = true

sourcePath = "/var/tmp/old.txt"
targetPath = "/var/tmp/new.txt"

app.doShellScript("cp -f '" + sourcePath + "' '" + targetPath + "'")

我知道这只是一种解决方法......