我正在使用谷歌应用程序脚本在谷歌硬盘上创建一个文件夹。我不想在驱动器上有任何重复,所以我创建了一个函数来查明该文件夹是否存在。
我将所有文件夹名称放入一个数组中,然后查看该数组中是否存在文件夹名称。它总是返回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;
};
答案 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
。