2014-03-06 35 views
3

我想为Google云端硬盘创建一个脚本。我想每周备份一次我的文件夹并将它们存储在Google云端硬盘中的另一个文件夹中。 关于每周的触发器,我已经确定了,但是我遇到了问题,因为我找不到压缩整个文件夹的方法。 我想压缩的文件夹有多个子文件夹和文档。我试过在每个文件夹中搜索并制作一个文件的zip文件,但是我觉得它很复杂,并且我最终得到了一个文件夹的许多zip文件。我至今的代码是这样的:以zip格式压缩多个文件夹 - Google Drive Scripts

function zipFolder(pathFolder, filename, destinyPath) { 
    var date = Utilities.formatDate(new Date(), "GMT", "ddMMyyyy"); 
    var destiny = DocsList.getFolder(destinyPath); 
    var folder = DriveApp.getFolderById(DocsList.getFolder(pathFolder).getId()); 
    var zip = Utilities.zip(folder, filename+date+'.zip'); 
    destiny.createFile(zip); 
} 

我收到错误,它无法压缩的文件夹,它必须是一个blob。我怎样才能解决这个问题?

谢谢!

回答

1

您可以使用此代码:

function zipFolder(pathFolder, filename, destinyPath) { 
    var date = Utilities.formatDate(new Date(), "GMT", "ddMMyyyy"); 
    var destiny = DocsList.getFolder(destinyPath); 
    var folder = DriveApp.getFolderById(DocsList.getFolder(pathFolder).getId()); 
    var zip = Utilities.zip(getBlobsPath(folder, ''), filename+date+'.zip'); 
    destiny.createFile(zip); 
} 

function getBlobsPath(reFolder, path) { 
    var blobs = []; 
    var files = reFolder.getFiles(); 
    while (files.hasNext()) { 
    var file = files.next().getBlob(); 
    file.setName(path+file.getName()); 
    blobs.push(file); 
    } 
    var folders = reFolder.getFolders(); 
    while (folders.hasNext()) { 
    var folder = folders.next(); 
    var fPath = path+folder.getName()+'/'; 
    blobs.push(Utilities.newBlob([]).setName(fPath)); //comment/uncomment this line to skip/include empty folders 
    blobs = blobs.concat(getBlobsPath(folder, fPath)); 
    } 
    return blobs; 
}