2

我正在使用谷歌應用程序腳本在谷歌驅動器上創建一個文件夾。我不希望在驅動器上有任何重複,所以我創建了一個函數來確定文件夾是否存在。在谷歌驅動器上,是否存在文件夾總是返回假

我把所有的文件夾名稱到一個數組,然後看如果文件夾名稱數組中存在。它總是返回假,雖然...

你能看到我在哪裏出了錯嗎?或者有沒有更好的方法來確定驅動器上是否存在文件夾?

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; 

}; 

回答

1

當您嘗試搜索Folder對象時,只能搜索字符串。

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; 

}; 
6

還有就是要檢查,如果一個文件夾已經存在另一種有效的方式,這是一個帶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集成到您用來創建文件夾的現有代碼中。

+0

好吧,那簡直太簡單了。在try函數沒有執行之後,我發現代碼會停止運行之前,我嘗試了一個函數,因此它與您的示例完全相同。我沒有意識到它可以發揮自己的作用。謝謝你的幫助Serge – user2096568

+0

這個函數'testFolder'似乎不可靠。你不能將一個變量傳遞給catch,所以exists = false將不起作用。我想我可以改進你的方法,雖然 'function doesFolderExist(folderName){ var exists = true; 嘗試{var testFolder = DocsList.getFolder(folderName); if(typeof testFolder =='folder'){ return exists; } } 趕上(ERR){風險存在=假 回報存在; } };' – user2096568

+0

什麼叫 「不可靠」 是什麼意思?一個腳本有效或不可行,不可靠意味着有時它有時候不會......在這種情況下,IMO只是起作用。 –

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代替。

相關問題