【问题标题】:Checking the existence of a named folder prior to creating it在创建命名文件夹之前检查它是否存在
【发布时间】:2015-10-25 14:38:40
【问题描述】:

我正在尝试将 Google Drive 中的特定文件插入到文件夹中。我还想检查是否有一个名为'testFolder' 的文件夹:如果是,则将文件插入到该现有文件夹中,否则创建一个名为'testFolder' 的文件夹。

这是我到目前为止的想法,但它总是会创建一个名为 'testFolder' 的新文件夹(因此用户现在有大约 10 个名为 'testFolder' 的文件夹 - 它不会重复使用第一个文件夹)。

var copyId = /* the id of the file to copy */;
function InsertFileToFolder() {
  var file = DriveApp.getFileById(copyId);      
  var folder;
  if (folderExists() == true){                        
    folder = DriveApp.getFolder("testFolder"); //<-- No such thing in GAS i think?
  } else {
    folder = DriveApp.createFolder("testFolder");
  }
  folder.addFile(file);
}

//Check whether folder exists or not
function folderExists() {
  var folders = DriveApp.getFolders();
  var flag = false;  
  for(var i = 0; i < folders.length; i++){
    if(folders[i].getName() == 'testFolder'){
      flag = true;
      break;
    }
  }
  return flag;
}

【问题讨论】:

  • `folderExists())' 函数返回什么?是真的吗,您仍然会在错误的位置找到一个新文件夹。还是返回假?没有找到它应该的文件夹。

标签: google-apps-script google-drive-api


【解决方案1】:

folders 没有 length 属性。您需要使用hasNext()

Google Documentation - Folder Class

// Log the name of every folder in the user's Drive.
var folder,folders;

folders = DriveApp.getFolders();

while (folders.hasNext()) {
  folder = folders.next();
  Logger.log(folder.getName());
}

如果找到要查找的文件夹,此代码将返回文件夹 ID:

function InsertFileToFolder() {
  var file,folder,
      folderIdOrFalse;
  file = DriveApp.getFileById(copyId);      

  folderIdOrFalse = folderExists();

  if (folderIdOrFalse !== false) {                        
    folder = DriveApp.getFolderById(folderIdOrFalse);
  } else {
    folder = DriveApp.createFolder("testFolder");
  }

  folder.addFile(file);
};

function folderExists() { //Check whether folder exists or not

  var folders = DriveApp.getFolders();
  var theReturn = false,
      i=0,
      folderName = "",
      folder;  

  while (folders.hasNext()) {
    folder = folders.next();
    folderName = folder.getName();

    if (folderName === 'testFolder') {
      theReturn = folder.getId();
      break;
    };
  };

  return theReturn;
};

【讨论】:

  • 谢谢你,桑迪,当然,感谢你为我指明了正确的方向,你的例子也很完美,没有必要改变任何事情! :)
【解决方案2】:

Google 已更改其脚本。我知道这是一篇旧帖子,但这是我能想到的当前最佳答案:

function getFolder(parent_folder,folder_name){
  var folders = parent_folder.getFolders();     
  while (folders.hasNext()) {
    var folder = folders.next();
    if(folder_name == folder.getName()) {         
      return folder;
    }
  }
  return false;
}

var parent_folder = DriveApp.getFolderById(//id\\);
var folderName = getFolders(parent_folder,name);
if (folderName === false){
  folderName =  outputfolderId.createFolder(name);
}

在这个答案中找到:How to create a folder if it doesn't exist?

【讨论】:

    猜你喜欢
    • 2014-06-10
    • 2011-08-21
    • 1970-01-01
    • 2019-04-21
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2015-02-16
    相关资源
    最近更新 更多