为什么Folder.getFilesByName(name)找不到我的文件?

时间:2017-09-06 23:51:59

标签: google-apps-script

在google驱动器文件夹中,我有一个名为“Tønseth和Øyen”的文档。 folder.getFilesByName(“Tønseth和Øyen”)找不到它。如果我将其名称放在getFilesByName中,则会找到我拥有的每个其他文件。它与“Ø”有关吗?还有另外一种方法吗?

1 个答案:

答案 0 :(得分:3)

是。 getFilesByName()无法找到øØ的此类字符。但您可以使用Drive API检索文件。通过使用此方法,还可以检索包含变音符号的文件名。请确认以下脚本。

脚本1:使用DriveApp

我认为这是最简单的。

var files = DriveApp.searchFiles('title contains "Tønseth and Øyen" and trashed=false');
while (files.hasNext()) {
  var file = files.next();
  Logger.log("id=%s, name=%s", file.getId(), file.getName())
}

>>> id=#####, name=Tønseth and Øyen

如果“Tønseth和Øyen”文件只是Google云端硬盘上的文件,您可以使用以下简单脚本。这也可以替换为您问题的folder.getFilesByName("Tønseth and Øyen")

var file = DriveApp.searchFiles('title contains "Tønseth and Øyen" and trashed=false').next();

脚本2:使用高级Google服务(Drive API v2)

要使用此脚本,请在Advanced Google Services为脚本2启用Drive API,在API console为脚本2和脚本3启用Drive API。

var params = {
  q: "title contains 'Tønseth and Øyen' and trashed=false",
  fields: "items(id, title)"
};
var res = Drive.Files.list(params);
Logger.log(res)

结果:

{
  "items": [
    {
      "id": "#####",
      "title": "Tønseth and Øyen"
    }
  ]
}

如果您不想使用高级Google服务(Drive API v2),您还可以使用UrlFetchApp.fetch()检索文件。在这种情况下,您可以使用Drive API v3。

脚本3:使用UrlFetchApp.fetch()。 (Drive API v3)

var filename = "Tønseth and Øyen";
var url = "https://www.googleapis.com/drive/v3/files?fields=files(id,name)&q=name+contains+'" + filename + "' and trashed=false";
var params = {
  method: "GET",
  headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
  muteHttpExceptions: true
};
var res = UrlFetchApp.fetch(url, params).getContentText();
Logger.log(res)

结果:

{
 "files": [
  {
   "id": "#####",
   "name": "Tønseth and Øyen"
  }
 ]
}