将工作表移动到具有相同名称的文件夹中

时间:2017-01-25 16:41:52

标签: google-apps-script

如果您的驱动器中有多个文件和文件夹,您将如何将同一名称文件移动到同一名称文件夹中。

即。

文件名= Bob,Tom

文件夹名称= Bob,Tom

文件' Bob'应该移到文件夹' Bob'和文件'汤姆'应该移到文件夹“Tom'。

1 个答案:

答案 0 :(得分:0)

GAS没有移动文件的命令。为了实现文件移动,在将文件复制到文件夹后,它会删除源文件。即使文件和文件夹名称相同,也可以运行。我准备了2个脚本。

如果存在复制目标文件夹:

var list = ['Bob', 'Tom'];
for (i in list){
  var file = DriveApp.getFilesByName(list[i]).next();
  var folder = DriveApp.getFoldersByName(list[i]).next(); // existing folder
  var sourcefolder = file.getParents().next();
  folder.addFile(list[i]);
  sourcefolder.removeFile(list[i]);
}

如果不存在复制目标文件夹:

var list = ['Bob', 'Tom'];
for (i in list){
  var file = DriveApp.getFilesByName(list[i]).next();
  var folder = DriveApp.createFolder(list[i]); // make new folder
  var sourcefolder = file.getParents().next();
  folder.addFile(list[i]);
  sourcefolder.removeFile(list[i]);
}

根据@pinoyyid的建议,我得到了另一种使用GAS在Google云端硬盘上移动文件的方法。我注意到" GAS没有移动文件的命令。"是错的。非常感谢@pinoyyid。

另一种方法:

var accesstoken = '#####';
var list = ['Bob', 'Tom'];
for (i in list){
  var file = DriveApp.getFilesByName(list[i]).next().getId();
  var folder = DriveApp.getFoldersByName(list[i]).next().getId(); // existing folder
  var parameters = {
    method:'put',
    headers: {
              'Authorization': 'Bearer ' + accesstoken,
              'uploadType' : 'multipart/related'
    },
    contentType: 'application/json',
    payload: JSON.stringify({'parents': [{id: folder}]}),
    muteHttpExceptions : true
  };
  UrlFetchApp.fetch('https://www.googleapis.com/drive/v2/files/' + file, parameters); 
}

使用Google API OAuth2.0的访问令牌,可以直接移动Google云端硬盘上的文件。

如果您在电子表格中有文件夹名称列表,如图所示,则可以使用以下脚本。该脚本将文件移动到文件夹。此时,文件名和文件夹名称相同。

enter image description here

var list = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('a1:a3').getValues();
for (i in list){
  var file = DriveApp.getFilesByName(list[i][0]).next();
  var folder = DriveApp.getFoldersByName(list[i][0]).next();
  var sourcefolder = file.getParents().next();
  folder.addFile(list[i][0]);
  sourcefolder.removeFile(list[i][0]);
}