Google Script - Сравните часть имени файла с именем подпапки и переместите файл в подпапку, если есть совпадение - PullRequest
0 голосов
/ 13 января 2020

Спасибо всем замечательным людям, у меня есть скрипт, который перекрестно проверяет имена файлов с именами папок и перемещает файл в папку, если имя совпадает (код ниже)

С чем я борюсь теперь, если поиск в подпапке определенной папки и проверка файлов, чтобы увидеть, соответствует ли часть имени имени подпапки

например,

Папки:

Имя папки: example1 Подпапка name: example1-commercial Имя подпапки: example1-clients

Файлы: example1-commercial.pdf (перейти в папку example1-commercial) example1-clients.pdf (перейти в папку example1-clients)

Любая помощь будет принята с благодарностью!

Спасибо!

function folderAndFiles(){
  var files = [];
  var folderMap = {};

  var foldersParent = DriveApp.getFoldersByName("names").next();
  var filesParent = DriveApp.getFoldersByName("files").next();

  var filesIterator = filesParent.getFiles();
  var foldersIterator = foldersParent.getFolders();



  while(filesIterator.hasNext()) {
    var currentFile = filesIterator.next();
    files.push(currentFile);

  }

  while(foldersIterator.hasNext()) {
    var currentFolder =  foldersIterator.next();
    folderMap[currentFolder.getName()] = currentFolder;


  }

  for (var i=0; i<files.length; i++) {
    var file = files[i];
    var fileName = file.getName().replace('.jpg', '');
    var destinationFolder = folderMap[fileName];

    if (destinationFolder) {
      destinationFolder.addFile(files[i]);
      filesParent.removeFile(file);
      Logger.log("Moved");
    }
  }
}

1 Ответ

0 голосов
/ 15 января 2020

Вы можете использовать следующий код для достижения sh ваших целей:

function sortFiles() {
//  var folders = Drive.Files.list({
//    "q": "mimeType = 'application/vnd.google-apps.folder' and trashed = false",
//    "fields": "items(title, id)"
//  });
  var folders = DriveApp.getFolders();  
//  var files = Drive.Files.list({
//    "q": "mimeType != 'application/vnd.google-apps.folder' and trashed = false",
//    "fields": "items(title, id)"
//  });
  var files = DriveApp.getFiles();
  var folderIDs = [];
  var folderNames = [];
  var fileIDs = [];
  var fileNames = [];

  do {
    var folder = folders.next();
    folderNames.push(folder.getName());
    folderIDs.push(folder.getId());
  } while (folders.hasNext());

  do {
    var file = files.next();
    fileNames.push(file.getName());
    fileIDs.push(file.getId());
  } while (files.hasNext());

  for (var i = 0; i < fileNames.length; i++) {
    for (var j = 0; j < folderNames.length; j++) {
      if (folderNames[j].search(fileNames[i]) > -1) {
        var oldFileParents = DriveApp.getFileById(fileIDs[i]).getParents();
        DriveApp.getFolderById(folderIDs[j]).addFile(DriveApp.getFileById(
          fileIDs[i]));
        if (oldFileParents.hasNext()) {
          do {
            oldFileParents.next().removeFile(DriveApp.getFileById(fileIDs[i]));
          } while (oldFileParents.hasNext());
        }
      }
    }
  }
}

На основании вашего комментария я обновил код, чтобы использовать только класс DriveApp и не Drive API . Для дальнейшего использования я прокомментировал вызовы API для метода Files.list, который я использовал для сбора всех файлов и папок (кроме тех, которые находятся в корзине).

Код будет Сначала используйте методы .getFolders() и .getFiles() , чтобы собрать все папки и файлы вашего диска. Позже он создаст два массива для папок и файлов: один для идентификаторов и другой для имен. Затем массив имен повторяется в поисках совпадений. После того как найдено одно совпадение, он запишет текущую папку (и) файла с помощью методов .getFileById().getParents(). Нам нужно использовать этот подход, потому что один файл может находиться в разных папках диска.

Итак, заключительные шаги будут следующими: во-первых, соберите текущую папку (и) файла. После этого мы включим файл в новую папку. И, наконец, мы должны удалить родительские папки, ранее сохраненные на первом шаге.

Пожалуйста, напишите мне снова, если вам нужна дополнительная помощь или разъяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...