удалить несколько файлов на Google Диске в папке с помощью поиска

Я пытаюсь удалить некоторые файлы со своего диска, используя это:

function deleteFiles(){
var files = DriveApp.searchFiles('title:720p');
  Logger.log(files);
  //Logger.log(files.next().getName);
  while (files.hasNext()) {
   // files.next().setTrashed(true);
    //Logger.log(files.next().getName());
    Logger.log('hola');
  }
}

Но я получаю Error: Invalid argument:q во всех прокомментированных строках, даже в цикле while. Первый регистратор показывает Folder Iterator, так что все должно быть в порядке ...

Файлы существуют! и все они имеют разные названия, но в их названиях есть общее "720p".

Кроме того, и я еще не смог это реализовать, мне нужно только удалить эти файлы, которые находятся только в одной конкретной папке.


person kurokirasama    schedule 01.05.2017    source источник


Ответы (5)


Похоже, ваш поисковый запрос находится посередине или в конце имени или заголовка файла. Попробуйте использовать это, мне кажется, это работает. https://developers.google.com/drive/v3/web/search-parameters

function deleteFiles() {
  var searchTerm = "12345test"
  var searchFor ="fullText contains '" + searchTerm + "'"; //single quotes are needed around searchterm
 var files = DriveApp.searchFiles(searchFor); 
 while (files.hasNext()) {
   var file = files.next();
   Logger.log(file.getName());
  // file.setTrashed(true)
 }
}
 

person OblongMedulla    schedule 02.05.2017
comment
да, помните, он найдет любой файл, внутри которого есть этот термин - person OblongMedulla; 02.05.2017

Я нашел решение, но оно неэффективно, не стесняйтесь предложить более эффективное:

function deleteFiles(){    
  var folder = DriveApp.getFoldersByName('MyFolder').next();
  var files = folder.getFiles();
  while (files.hasNext()) { 
    var file = files.next();
    var filename = file.getName();
    if (filename.indexOf("720p")>-1){
    Logger.log(filename);
    file.setTrashed(true);  
    }     
  }
}
person kurokirasama    schedule 02.05.2017

мог бы попробовать что-то вроде этого -

function deleteFiles() {
// Log the name of every file named "12345test" in the user's Drive.
 var files = DriveApp.getFilesByName('12345test');
 while (files.hasNext()) {
   var file = files.next();
   Logger.log(file.getName());
  // file.setTrashed(true)
 }
}

person OblongMedulla    schedule 01.05.2017
comment
привет, я не могу использовать getFilesbyName, потому что есть много файлов с разными именами, но все они имеют общий 720p ... Поиск по расширению тоже может помочь ... - person kurokirasama; 01.05.2017
comment
Я добавил новый ответ - person OblongMedulla; 02.05.2017

Посмотрите на Advanced Drive Service и опцию запроса "title contains xxxx"

person pinoyyid    schedule 01.05.2017
comment
Я пробовал это, но иногда это работает, а иногда нет (хотя я ничего не менял в приводе). Есть ли способ поиска по расширению? - person kurokirasama; 02.05.2017
comment
я не могу использовать ничего описанного там, все мои поиски дают 0 результатов ... мой поиск должен быть: name contains '720p' and 'folderid' in parents. - person kurokirasama; 02.05.2017

вот другой способ, используя технику searchFiles

function deleteFiles() {
  var searchTerm = "12345test"
  var searchFor ="title contains '" + searchTerm + "'"; //single quotes are needed around searchterm
 var files = DriveApp.searchFiles(searchFor); 
 while (files.hasNext()) {
   var file = files.next();
   Logger.log(file.getName());
  // file.setTrashed(true)
 }
}

person OblongMedulla    schedule 02.05.2017
comment
Он отлично работает для меня - какой тип файла и имя вы ищете, я могу попытаться продублировать? Если вы создадите файл с именем 12345test, он будет работать? - person OblongMedulla; 02.05.2017
comment
файлы имен: this.is.the.file.number.1.720p.ext. Я пробовал искать по другим файлам, но ничего не работает, кроме name contains 'pdf', которые дают мне все мои файлы pdf .... - person kurokirasama; 02.05.2017
comment
Я вижу, что сейчас происходит - поиск ведется от самого левого края заголовка. - См. Ответ №3. - person OblongMedulla; 02.05.2017