【问题标题】:Google Apps Script returning all files in Drive, rather than files in a folderGoogle Apps 脚本返回云端硬盘中的所有文件,而不是文件夹中的文件
【发布时间】:2020-02-02 06:31:52
【问题描述】:

我在 Google 云端硬盘中有一个文件夹,其中有一些文件。我想检索所有这些文件信息,这就是我想要的。其他文件夹中还有很多其他文件,但我不需要它们。但是,我的以下代码显示了所有文件的名称。如何将结果限制为仅指定文件夹中的文件?

//Folder ID
var myFolderId = "XXXXXXXXXXXXXXXXXXXXXXXXX";
var files = DriveApp.getFolderById(myFolderId).getFiles();
while(files.hasNext())
{
    var file = files.next();
    Logger.log(file.getName());
}

目前,此文件夹中只有 4 个文件,但日志显示了我的 Google Drive 中的整个文件名。我不知道我做错了什么,因为我正在指定带有 ID 的文件夹。为什么它会返回 Google Drive 中的每个文件?

【问题讨论】:

  • 它对我有用。然而,我确实将它包装在一个函数声明中。
  • 这是我的代码function getFoldersFiles() { var myFolderId = "..."; var files = DriveApp.getFolderById(myFolderId).getFiles(); while(files.hasNext()) { var file = files.next(); Logger.log(file.getName() + '\n'); } }
  • @Cooper - 您的代码完美运行 :) 我认为您应该将其发布为答案。

标签: google-apps-script


【解决方案1】:

答案:

你的代码已经很好用了!

更多信息:

Google Apps 脚本不允许运行全局代码,因为需要声明和运行特定函数,至少与本地运行代码不同。全局变量是静态的,不能在运行时改变。

你可以做的事情:

正如 Cooper 在他们的评论中提到的那样 - 您只需将代码放入函数中,调用该函数即可。代码效果很好:

function functionName(){
  var myFolderId = "XXXXXXXXXXXXXXXXXXXXXXXXX";
  var files = DriveApp.getFolderById(myFolderId).getFiles();
  while(files.hasNext())
  { 
    var file = files.next();
    Logger.log(file.getName());
  }
}

附带说明:如果您真的想要使用全局范围(或​​至少。使用它的模拟),PropertiesService 可供您使用,尽管您会仍然需要在一个函数中设置它们并运行一个函数来检索它们:

function setVars(){
  PropertiesService.getScriptProperties().setProperty('myFolderId', 'XXXXXXXXXXXXXXXXXXXXXXXXX');
}
function listFiles(){
 var files = DriveApp.getFolderById(PropertiesService.getScriptProperties().getProperty('myFolderId')).getFiles();
 //continue this code
}

【讨论】:

  • 实际上我在全局变量中有我的文件夹 ID,它是在另一个文件中设置的。我以为运行这个文件会运行所有文件,但事实并非如此。因此,getFolderById(myFolderId) 没有按预期工作,因为 myFolderId 基本上是空的。没有弹出错误,它正在返回 Google Drive 中的所有文件,所以我很困惑,但这就是原因!谢谢大家!
猜你喜欢
  • 2020-02-21
  • 2023-02-02
  • 1970-01-01
  • 2017-08-02
  • 2022-01-12
  • 2017-07-13
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
相关资源
最近更新 更多