Как переименовать несколько файлов на Google Диске с помощью скрипта? - PullRequest
0 голосов
/ 18 июня 2020

Я хочу переименовать файлы в моей папке диска Google с помощью скрипта Google.

Я хочу заменить oldname моими явно упомянутыми новыми именами по отдельности

Для целей этого вопроса я упрощаю для понимания

Вот идентификатор папки - 170hvRkGqyeIHsRMjjfLphv_Js2vIb5gV

Внутри 3 файла с именами 1.mp4, 2.mp4, 3.mp4 ... Я хочу их переименовать в ab c .mp4, xyz.mp4, pqr.mp4

javascript должен работать как

search 1.mp4 в данной папке id рекурсивно, если он найден, замените на ab c .mp4 , иначе игнорируйте . Искать 2.mp4 в заданном идентификаторе папки рекурсивно, при обнаружении заменить на xyz.mp4 , иначе игнорировать . Искать 3.mp4 в заданном идентификаторе папки рекурсивно, при обнаружении заменить на pqr.mp4 , иначе игнорировать .

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

Поскольку кто-то здесь предложил использовать операторы if / else, я попытался это сделать. Вот сценарий, который я использовал, а пока я просто пытаюсь изменить 1.mp4 на ab c .mp4 в качестве быстрого мини-теста. Выполнение кода не вызывает никаких ошибок, но при этом вообще не меняет имя файла. Во время выполнения скрипта он даже запросил доступ к моему диску, но все равно не смог завершить задание.

function rename() {
 console.log('Script Working');
 var SourceFolder = DriveApp.getFolderById("170hvRkGqyeIHsRMjjfLphv_Js2vIb5gV");
 console.log(SourceFolder);
 var Files = SourceFolder.getFiles();
 console.log(Files);
 for (var i in Files) {
  if (i.getName().equals("1.mp4")) {
   console.log(i);
   i.setName("abc.mp4");
   console.log(i);
  }
 }
}

rename();

Я добавил скрипт входа в консоль, чтобы знать, где именно происходит ошибка, вот журнал консоли

[20-06-18 20:08:38:913 IST] Script Working
[20-06-18 20:08:38:991 IST] {}
[20-06-18 20:08:38:993 IST] {}
[20-06-18 20:08:39:004 IST] Script Working
[20-06-18 20:08:39:081 IST] {}
[20-06-18 20:08:39:085 IST] {}

Я не понимаю, почему не удается получить исходную папку

1 Ответ

2 голосов
/ 18 июня 2020

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

function rename(iA=['FileA','FileB','FileC'],oA=['File1','File2','File3']) {
  const SourceFolder=DriveApp.getFolderById("Folder Id");
  const Files = SourceFolder.getFiles();
  while(Files.hasNext()) {
    let file=Files.next();
    let idx=iA.indexOf(file.getName());
    if(idx!=-1) {
      file.setName(oA[idx])
    }
  }
}

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

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