Перемещение созданных файлов с помощью 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});
})();