Использовать значение переменной в запросе DriveApp searchFiles - PullRequest
0 голосов
/ 28 июня 2018

У меня может быть глупый вопрос, но я не могу найти решение

Я просмотрел множество файлов на своем диске Google, и внутри каждого файла есть число в диапазоне 0-10000, поэтому я сделал это:

for(var i = 0; i < 10000; i++)
{
  var test = "IT" + i;
  Logger.log(test);
  var search = DriveApp.getFolderById("ID")
                       .searchFiles('fullText contains test');
  Logger.log(search);
  while (search.hasNext()) {
    var file = search.next();
    if(search.hasNext())
      break;
    Logger.log(file.getName());
  }
  ...

У меня вопрос, как я могу поместить переменную следующим образом:

.searchFiles('fullText contains $variable');

, чтобы я мог использовать значение переменной test, т.е. "IT0", а не буквальную строку test?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

В документации * REST API Drive :

  • Оператор contains выполняет сопоставление только для целых строковых токенов для fullText. Например, если полный текст документа содержит строку HelloWorld , только запрос fullText contains 'HelloWorld' возвращает результат. Такие запросы, как fullText contains 'Hello', не возвращают результаты в этом сценарии.
  • Оператор contains соответствует точной буквенно-цифровой фразе, если она заключена в двойные кавычки. Например, если fullText документа содержит строку Hello there world , запрос fullText contains '"Hello there"' вернет результат, а запрос fullText contains '"Hello world"' - нет. Кроме того, поскольку поиск является буквенно-цифровым, если fullText документа содержит строку Hello_world , запрос fullText contains '"Hello world"' вернет результат.

В комментариях вы упоминаете, что пытались searchFiles('fullText contains "IT"' + test), который не соответствует требуемому синтаксису условия поиска - он оценивается примерно как fullText contains "IT"0 (или fullText contains "IT"IT0, в зависимости от того, изменили ли вы другой кодовые части) вместо fullText contains "IT0"

Хорошая практика при отладке ошибок в запросах на основе переменных - сначала выполнить построение (чтобы можно было точно записать запрос в журнал), а затем фактически выполнить запрос:

var myQuery = "fullText contains \"" + myVar + "\"";
// var mySingleQuotedQuery = "fullText contains '" + myVar + "'";
try {
  /* use myQuery */
}
catch (err) {
  err.message = "Error using 'myQuery': " + err.message;
  // Log debug info to StackDriver:
  console.error({message: err.message, error: err, query: myQuery, variable: myVar});
  throw err;
}
0 голосов
/ 28 июня 2018

Вы должны использовать escape-последовательность, когда хотите добавить двойные кавычки в вашей строке. Таким образом, ваша строка будет: 'fullText содержит \ "IT \"'

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