【问题标题】:on google drive, does folder exist always returns false在谷歌驱动器上,文件夹是否存在总是返回 false
【发布时间】:2013-07-09 22:35:07
【问题描述】:

我正在使用谷歌应用脚​​本在谷歌驱动器上创建一个文件夹。我不希望驱动器上有任何重复,所以我创建了一个函数来确定文件夹是否存在。

我将所有文件夹名称放入一个数组中,然后查看该文件夹名称是否存在于该数组中。但它总是返回 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;

};

【问题讨论】:

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


    【解决方案1】:

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

    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 集成到您用于创建文件夹的现有代码中。

    【讨论】:

    • 好吧,这简直太简单了。在我发现在 try 函数未执行后代码将停止运行之前,我在函数中有一个 try catch,因此它与您的示例完全相同。我没有意识到它会在自己的功能中发挥作用。感谢您的帮助,谢尔盖
    • 这个函数'testFolder'似乎不可靠。您不能将变量传递到 catch 中,因此 exists=false 将不起作用。我想我可以改进你的方法虽然function doesFolderExist(folderName) { var exists = true; try{var testFolder = DocsList.getFolder(folderName); if(typeof testFolder == 'folder') { return exists; } } catch(err){var exist=false return exist; } };
    • “不可靠”是什么意思?一个脚本工作或不工作,不可靠意味着有时它有时不......在这种情况下,IMO 它只是工作。
    • 很抱歉,这可能是一种居高临下的感觉,我今天早上正在查看代码,由于变量存在,它看起来无法正常工作。你的权利它确实有效。
    【解决方案2】:

    在尝试搜索文件夹对象时,您只能搜索字符串。

    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;
    
    };
    

    【讨论】:

      【解决方案3】:

      以下函数检查路径是否存在。如果没有,它会创建它。传递的参数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

      【讨论】:

        猜你喜欢
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        • 2015-10-20
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多