Прокручивать папки и подпапки и переименовывать файлы - PullRequest
0 голосов
/ 10 декабря 2018

Для «управления» нужно, чтобы я переименовал группу файлов на диске Google.Когда я говорю «куча», я говорю тысячи.Я пишу способ сделать это.

До сих пор мне удалось написать некоторый код, который позволяет мне переименовывать файлы на одном уровне структуры папок.Допустим, структура папки имеет вид:

\Folder 1
   \Folder 2
   \Folder 2.2
       \Folder 3

Этот код переименовывает все файлы в папке 2 и в папке 2.2 (с учетом идентификатора папки 1), но не в папке 1 или папке 3. Я также неНе знаю, сколько уровней в структуре папок.

Я думаю, должен быть способ, которым я могу использовать бит переименования файла этого кода в качестве отдельной функции и вызывать его для каждой папки в папке верхнего уровня,Я просто не могу понять, как это сделать.

У меня есть следующее:

function renameFile() {
 var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main");
  var lastRow = sourceSheet.getLastRow();
  var filePaths = sourceSheet.getRange(4, 1, 1, 1).getValues(); 

  var pre = sourceSheet.getRange("C4").getValue(); 
  var folder = DriveApp.getFolderById(filePaths);

  var contents = folder.getFiles();
  var folders = folder.getFolders();
  var ver = 1;

  while (folders.hasNext()) {
    var subFolder = folders.next();
    var subFolderID = subFolder.getId();
    var nextSubFolder = DriveApp.getFolderById(subFolderID);
    var subFiles = subFolder.getFiles();
    var subFolders = subFolder.getFolders();

    while (subFiles.hasNext()) {
      var file = subFiles.next();
      var curID = file.getId();
      var curName = file.getName();
      var fileToRename = DriveApp.getFileById(curID);

      var newName = pre + " " + curName + " Version " + ver;

      fileToRename.setName(newName);
    }
  }
}

Заранее спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018
  • Вы хотите переименовать все файлы в определенной папке.
    • Вы хотите переименовать файлы с исходного имени на pre + " " + curName + " Version " + ver.
    • Значения pre и ver являются постоянными.
  • В конкретной папке есть различные структуры папок.

Если я правильно понял, как насчет этой модификации?Я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Точки модификации:

  • В вашем скрипте есть несколько переменных, которые не используются в скрипте.
  • В вашем скрипте извлекаются только файлы первого уровня.
    • Например, когда папка извлекается, папки в извлеченной папке необходимо извлекать рекурсивно.

Модифицированный скрипт:

function renameFile() {
  // Added
  var renameFiles = function(id) {
    var files = DriveApp.getFolderById(id).getFiles();
    while (files.hasNext()) {
      var file = files.next();
      var curID = file.getId();
      var curName = file.getName();
      var newName = pre + " " + curName + " Version " + ver;
      file.setName(newName);
    }
    var ids = [];
    var folders = DriveApp.getFolderById(id).getFolders();
    while (folders.hasNext()) {
      ids.push(folders.next().getId());
    }
    if (ids.length > 0) ids.forEach(function(id) {renameFiles(id)});
  }

  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Main");
  var filePaths = sourceSheet.getRange(4, 1).getValue(); // Modified
  var pre = sourceSheet.getRange("C4").getValue(); 
  var ver = 1;
  renameFiles(filePaths); // Added
}

Примечание:

  • Я рекомендую перед запуском этого сценария протестировать его, используя примеры файлов и папок.
  • Этот сценарий предполагает следующее,
    • filePaths - идентификатор папки.А именно, идентификатор папки помещается в ячейку «А4».
  • Если в папке много файлов, существует вероятность, что ограничение времени выполнения скрипта(6 мин / исполнение) превышает.
    • В то время, пожалуйста, попробуйте следующие методы.
      1. Разделите папку и запустите скрипт для каждой папки.
      2. Сначала все файлы извлекаются.В качестве следующего шага, он переименовывает все имена файлов, используя пакетные запросы.Поскольку «Пакетные запросы» работают с асинхронной обработкой, стоимость обработки будет снижена.Я думаю, что вышеописанный модифицированный скрипт и этот ответ будут полезны для этого.

Ссылка:

Если я неправильно понимаю вашу ситуацию, пожалуйста, сообщите мне.Я хотел бы изменить его.

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