JXA: удалить папку, создать новую папку, переместить соответствующие файлы в новую папку - PullRequest
0 голосов
/ 15 июня 2019

Я ОЧЕНЬ новичок в JXA, так что я уверен, что многое еще не знаю. Я разработчик Javascript, но изучаю это всего один день. Вот что я пытаюсь сделать:

У меня на MacBookPro куча папок с видео курсами в формате mp4. Чтобы Plex мог видеть их как телешоу (что является наилучшим способом их просмотра), их необходимо переименовать и переместить в папку «Сезон 1». Я попытался несколько примеров сценариев, чтобы выполнить это, но я продолжаю получать ошибки, которые я не могу понять. Вот самая последняя итерация моего скрипта (вообще не касается переименования файлов):

var currentApp = Application.currentApplication();
currentApp.includeStandardAdditions = true;
var finder = Application("Finder");
var systemEvents = Application("System Events");
var folderName = "Season 1";
var extensionsToProcess = ["mp4","mkv","mpg","mov"] // For example: {"jpg", "jpeg"}, NOT: {".jpg", ".jpeg"}

// Ask a folder to process
var sourcePath = currentApp.chooseFolder ({
    withPrompt: "Choose the source folder"
}).toString();
var sourceFolder = systemEvents.aliases.byName(sourcePath);

// Create the destination folder
var container = sourceFolder.container();
var containerPath = container.path();
var destinationFolder = finder.make({
  new: "folder", at: containerPath,
  withProperties: { name: folderName }
});

// Create an array of items to be processed
var items = systemEvents.aliases.byName(sourcePath).diskItems;
var selectedItems = [];

for (var i = 0; i < items.length; i++) {
  var item = items[i];
  if (item.class() != "folder" && item.visible()) {
    selectedItems.push(item.name());
  }
}

// Process every item
var createdFolders = [];
selectedItems.forEach(function(itemName) {
  var item = systemEvents.aliases.byName(sourcePath + "/" + itemName);
  var extension = item.nameExtension();
  var name = item.name().match(/(.*) - (.*)/);

  if (extensionsToProcess.includes(extension)) {
    try {
      var folderName = sourceFolder;
      if (!createdFolders.includes(folderName)) {
        var newFolder = finder.make({
          new: "folder", at: destinationFolder, withProperties: { name: folderName }
        });
        createdFolders.push(folderName);
      }
      item = finder.move(item.path(), { to: destinationFolder.folders[folderName] });
      item.name = name[2];
    } catch (error) {
      console.log("Error (item: " + item.name() + "): " + error);
    }
  }
});

В настоящее время я получаю сообщение об ошибке в строке, где я пытаюсь создать новую папку (destinationFolder), в которой говорится, что папка уже существует, чего нет, поэтому я, очевидно, немного растерялся. Любая помощь будет принята с благодарностью!

...