【问题标题】:Moving created files with JXA使用 JXA 移动创建的文件
【发布时间】:2015-08-10 22:11:26
【问题描述】:

我是 JXA 脚本的新手,但我正在尝试解决一些目前在工作中使用的旧脚本。他们循环浏览一个 InDesign 文档并基于它创建几个 PDF。以前,它们将存储在名为“~/PDFExports”的文件夹中。但是,这不适用于 10.10。

如果我将代码更改为仅将 PDF 放在“~/”中,它可以正常工作。从那里,我想将文件移动到“~/PDFExports”,但我似乎找不到如何做到这一点的答案。我见过有关调用 ObjC 或调用 Application('Finder') 的事情,但两者都不起作用 - 它们都返回未定义。

我只是在这里遗漏了一些基本的东西,还是用 JXA 简单地移动文件真的这么难?

编辑:关于我如何创建相关文件夹以及我如何尝试使用 Finder 的一些语法。

//This is called in the Main function of the script, on first run.

var exportFolder = new Folder(exportPath);
if(!exportFolder.exists) {
    exportFolder.create();
}

//This is called right after the PDF is created. file is a reference to the 
actual PDF file, and destination is a file path string.

function MoveFile(file,destination){
   var Finder = Application("Finder");

   Application('Finder').move(sourceFile, { to: destinationFolder });

   alert("File moved");
}

【问题讨论】:

    标签: javascript osx-yosemite adobe-indesign javascript-automation adobe-javascript


    【解决方案1】:

    Adobe 应用程序长期以来一直包含自己的嵌入式 JS 解释器、JS API 和 .jsx 文件扩展名。与JXA无关,不兼容。

    InDesign 的 JSX 文档:

    http://www.adobe.com/devnet/indesign/documentation.html#idscripting

    (顺便说一句,我还强烈建议不要将 JXA 用于 Adob​​e 应用程序自动化,因为它有很多缺失/损坏的功能和应用程序兼容性问题,并且确实不适合生产工作。)

    这是 Adob​​e 的 InDesign 脚本论坛的链接,这是获得 JSX 帮助的最佳地点:

    https://forums.adobe.com/community/indesign/indesign_scripting

    【讨论】:

    • 啊哈!这解释了很多。谢谢!
    【解决方案2】:

    您可以使用 Cocoa 创建文件夹

    var exportFolder = $.NSHomeDirectory().stringByAppendingPathComponent("PDFExports")
    var fileManager = $.NSFileManager.defaultManager
    var folderExists = fileManager.fileExistsAtPath(exportFolder)
    if (!folderExists) {
        fileManager.createDirectoryAtPathWithIntermediateDirectoriesAttributesError(exportFolder, false, $(), $())
    }
    

    移动文件

    var success = fileManager.moveItemAtPathToPathError(sourceFile, destinationLocation, $());
    if (success) alert("File moved");
    

    考虑destinationLocation 必须是包含文件名的完整路径
    sourceFile 和 destinationLocation 都必须是 NSString 对象,例如 exportFolder

    【讨论】:

    • 不。 OP 的脚本使用 InDesign 自己的嵌入式 JS 解释器,而不是 JXA。 OP似乎对差异感到困惑。 OP 需要下载我已经链接到的 Adob​​e 的 InDesign 脚本指南,然后学习。 (提示:ID 的 JS API 包含一个doScript 命令,可用于执行 AppleScript 代码。)
    • 是的,OP 混淆了这两者并不是很明显,特别是如果您不熟悉 Adob​​e 自己的 JS 支持。线索在措辞中:“旧脚本”(即 10.10 之前的版本)意味着它必须是 JSX,因为 JXA 只出现在 10.10 中。 (另外,正如我所说,将 JXA 用于 Adob​​e 自动化本身就是一个痛苦的秘诀。:p)
    • sourceFile 和 destinationLocation 可以是普通的 JS 字符串;他们将根据需要被强制转换为 NSString — developer.apple.com/library/archive/releasenotes/…。我刚刚对此进行了测试,它在 High Sierra 上对我有用。
    【解决方案3】:

    会不会是文件夹不见了?您对文件夹对象的引用可能无效吗?有什么语法可以显示?

    【讨论】:

    • 文件夹存在,如果不存在,我会在每个循环的开头创建它。而且我可能不正确地引用 Finder,我不确定。我编辑了我的初始帖子以显示我用于创建文件夹和访问 Finder 的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多