Перемещение созданных файлов с помощью JXA

Я новичок в сценариях JXA, но я пытаюсь найти и устранить некоторые старые сценарии, которые в настоящее время используются здесь, на работе. Они перебирают документ InDesign и на его основе создают несколько PDF-файлов. Ранее они были бы сохранены в папке "~/PDFExports". Тем не менее, это не работает с 10.10.

Если я изменю код, чтобы поместить PDF-файлы в "~/", он будет работать нормально. Оттуда я хотел бы переместить файлы в "~/PDFExports", но я не могу найти ответ о том, как это сделать. Я видел что-то о том, как звонить в ObjC или вызывать Application('Finder'), но ни одна из них не работает - они оба возвращают undefined.

Я просто упускаю что-то базовое здесь, или это действительно так сложно просто переместить файл с помощью 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");
}

4 ответа

Решение

Приложения Adobe уже давно включают в себя собственный встроенный интерпретатор JS, API JS и .jsx расширение файла Он не имеет ничего общего с JXA и не совместим с ним.

Документация InDesign по JSX:

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

(Кстати, я бы также настоятельно рекомендовал не использовать JXA для автоматизации приложений Adobe, так как в нем много отсутствующих / сломанных функций и проблем совместимости приложений, и он действительно не подходит для производственной работы.)

Вот ссылка на форум Adobe InDesign Scripting, который является лучшим местом для получения помощи по JSX:

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

Вы можете использовать Какао для создания папки

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

Может быть, папка отсутствует? Может быть, ваша ссылка на объект папки недействительна? Любой синтаксис, чтобы показать?

Я поделюсь некоторыми из того, что я узнал о методах перемещения и дублирования JXA. Я не профессиональный программист, а просто юрист, увлеченный автоматизацией. Мои комментарии основаны на множестве проб и ошибок, чтении всего, что я мог найти в Интернете, и МНОГО борьбы. Метод перемещения плохо работает с Finder. Вместо этого используйте метод перемещения системных событий. Метод дублирования в Finder работает отлично. Метод дублирования плохо работает в системных событиях. Это модифицированный фрагмент написанного мной скрипта, показывающий функцию move() с использованием системных событий.

      (() => {
    const strPathTargetFile = '/Users/bretfarve/Documents/MyFolderA/myFile.txt';
    const strPathFolder = '/Users/bretfarve/Documents/MyFolderB/';
    
    /* System Events Objects */ 
    const SysEvents = Application('System Events');
    const objPathFolder = SysEvents.aliases[strPathFolder];
        
    SysEvents.move(SysEvents.aliases.byName(strPathTargetFile), {to: objPathFolder});
})();
Другие вопросы по тегам