2

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

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

};
4

3 回答 3

7

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

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

于 2013-07-11T18:48:11.973 回答
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;

};
于 2013-07-11T16:30:00.767 回答
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不是。

于 2016-11-13T19:15:03.490 回答