在谷歌驱动器上,文件夹存在总是返回false

时间:2013-07-11 15:08:07

标签: function google-apps-script boolean google-drive-api directory

我正在使用谷歌应用程序脚本在谷歌硬盘上创建一个文件夹。我不想在驱动器上有任何重复,所以我创建了一个函数来查明该文件夹是否存在。

我将所有文件夹名称放入一个数组中,然后查看该数组中是否存在文件夹名称。它总是返回false但是......

你能看到我在哪里出错吗?或者是否有更好的方法来查明驱动器上是否存在文件夹?

function doesContainerExist(container) {
  var folders = DriveApp.getFolders();
  var Folders = new Array;
  var boolean;

  while(folders.hasNext()) {
    Folders.push(folders.next());
  }

  if(Folders.indexOf(container) == -1) {
    boolean = false;
  } else {
    boolean = true;
  }
  Logger.log(container);

  return boolean;

};

3 个答案:

答案 0 :(得分:7)

还有另一种有效的方法来检查文件夹是否已经存在,下面是带有测试功能的代码供您尝试:

function testTest(){
  Logger.log(testFolder('Photos'));// returns true if folder exists, false if it doesn't
}

function testFolder(folderName){
  var exist = true;
  try{var testFolder = DocsList.getFolder(folderName)}
  catch(err){exist=false}
  return exist;
}

由于您的最终目的是创建一个文件夹,您可以直接在脚本的“catch”部分创建它,或者只是将try / catch集成到您用来创建文件夹的现有代码中。

答案 1 :(得分:1)

当您尝试搜索“文件夹”对象时,可以仅搜索“字符串”。

function doesContainerExist(container) {
  var folders = DriveApp.getFolders();
  var Folders = new Array();
  var boolean;

  while(folders.hasNext()) {
    Folders.push(folders.next().getName());
  }

  if(Folders.indexOf(container) == -1) {
    boolean = false;
  } else {
    boolean = true;
  }
  Logger.log(container);

  return boolean;

};

答案 2 :(得分:0)

以下函数检查路径是否存在。如果没有,它会创建它。传递的参数path是一个看起来像(例如)的字符串: var path = "//Main Folder/Subfolder 1/Subfolder 2"; 如果要创建此目录,请致电createDirectory(path)

function createDirectory(path) {

  var name, folder, search, fullpath;

  // Remove slashes and trim the path
  fullpath = path.replace(/^\/*|\/*$/g, '').split("/");

  // start with the main folder
  folder = DriveApp.getRootFolder();

  for (var subfolder in fullpath) {

    name = fullpath[subfolder];
    search = folder.getFoldersByName(name);

    // If folder in current level does not exit, create it
    folder = search.hasNext() ? search.next() : folder.createFolder(name);        
  }      
  return folder;      
}

folder = search.hasNext() ? search.next() : folder.createFolder(name);可以替换为:

if (folders.hasNext()) {
  folder = folders.next();
} else {
  folder = DriveApp.createFolder(dropbox);
}

如果您只是想检查目录是否存在,则需要在循环中省略folder.createFolder(name);而不是return false