google-apps-script - Google 脚本 - 将文件名与文件夹名称进行比较,如果名称匹配,则将文件移动到文件夹中

标签 google-apps-script

我正在尝试将我的 Google 云端硬盘文件夹名称与某些文件名进行比较,如果匹配,则将文件移动到相应的文件夹。

即 -

文件夹:
示例1,
示例2,
示例3,

文件:
example1.jpg(移至文件夹 - example1),
example2.jpg(移至文件夹 - example2),
example3.jpg(移至文件夹 - example3)

到目前为止,我有两个带有文件夹和文件名的数组,我正在循环并比较这两个数组。

我正在努力解决下一步 - 将文件移动到文件夹。

这就是我到目前为止所得到的......

function folderAndFiles(){

  var fileArray = [];
  var folderArray = [];

  var dApp = DriveApp;
  var folderIter = dApp.getFoldersByName("files");
  var folder = folderIter.next();
  var fileIter = dApp.getFiles();
  var filesIter = folder.getFiles();



  while(filesIter.hasNext()) {
    var file = filesIter.next();
    var fileName = file.getName();
    fileArray.push(fileName)

  }

  fileArray.sort();
  var newFiles = fileArray.map(function(d) { return d.replace('.jpg', ''); });
  Logger.log(newFiles);



  var folderIterTwo = dApp.getFoldersByName("names");
  var folderTwo = folderIterTwo.next();
  var nameFolders = folderTwo.getFolders();



  while(nameFolders.hasNext()) {
    var folders =  nameFolders.next();
    var names = folders.getName();
    folderArray.push(names)

  }

  folderArray.sort();
  Logger.log(folderArray);



  for (var i = 0; i < folderArray.length; i++) {
    for (var j = 0; j < newFiles.length; j++) {
        if (folderArray[i] == newFiles[j]) {
         folderArray[i].addFile(fileArray[i]);
          Logger.log("Moved");
        }
    }
  }


}

任何帮助将不胜感激!

谢谢!

最佳答案

尝试下面的代码:

function folderAndFiles(){
  var files = [];
  var folderMap = {};

  var foldersParent = DriveApp.getFoldersByName("names").next();
  var filesParent = DriveApp.getFoldersByName("files").next();

  var filesIterator = filesParent.getFiles();
  var foldersIterator = foldersParent.getFolders();

  while(filesIterator.hasNext()) {
    var currentFile = filesIterator.next();
    files.push(currentFile);
  }

  while(foldersIterator.hasNext()) {
    var currentFolder =  foldersIterator.next();
    folderMap[currentFolder.getName()] = currentFolder;
  }

  for (var i=0; i<files.length; i++) {
    var file = files[i];
    var fileName = file.getName().replace('.jpg', '');
    var destinationFolder = folderMap[fileName];

    if (destinationFolder) {
      destinationFolder.addFile(files[i]);
      filesParent.removeFile(file);
      Logger.log("Moved");
    }
  }
}

程序流程如下:

  1. 创建一个包含所有要移动的文件的列表。

  2. 创建 dictionary将文件夹名称映射到实际的 folder object .

  3. 对于每个文件:

    1. 计算其名称(删除扩展名)。
    2. 检查是否存在同名的文件夹。
    3. 如果存在,请将相关文件移动到该文件夹​​。

请注意,文件实际上已移动 - 它被添加到新文件夹中,但也从原始文件夹中删除。如果您只想复制它,请删除代码中的 filesParent.removeFile(file); 行。

关于google-apps-script - Google 脚本 - 将文件名与文件夹名称进行比较,如果名称匹配,则将文件移动到文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59715922/

相关文章:

mysql - 如何处理mysql结果查询以通过大查询表发送它们

google-apps-script - 是否可以在 google 电子表格中隐藏或删除 "File" "Edit"等菜单?

javascript - 使用谷歌脚本的 Binance API 签名

javascript - 获取针对一组特定选项卡运行的 Google 电子邮件脚本

javascript - 如何使用 Apps 脚本获取 Google 日历事件附件

javascript - 关闭谷歌应用程序脚本中的窗口

google-apps-script - 谷歌文档脚本: appendText/insertText Formatting

javascript - 使用 Google Apps 脚本从 Google 文档中的文本中检索链接的 URL

javascript - 如何使用 google apps 脚本划掉电子表格的一行(不是删除它!)?

javascript - 将一个数组推到另一个数组的末尾