比较两个 Google 个驱动器文件夹的内容

Comparing the content of two Google Drive folders

大家好,互联网上的人们,这是我第一次 post 在这里,如果我忘记了任何可以帮助我解决这个问题的信息,请联系我。

我正在制作一个 Google 应用程序脚本,它应该列出 Google 驱动器中两个不同文件夹中包含的所有文件并比较它们。第一个文件夹名为“archives”,包含 pdf 文件列表,第二个文件夹名为“to_compare”。理论上,这两个文件夹包含相同的文件,除了“to_compare”文件夹每天更新新文件。我的脚本的目标是发现更新文件何时与“存档”文件不同。

这是我当前的代码,我的问题是,由于某种我无法解释的原因,我的脚本以一种奇怪的顺序遍历我的文件。我以为它会按照我的文件名在我的文件夹中迭代,但似乎不是这样。

我从比较中获得的所有反馈都存储在一个电子表格中,其中总结了文件名、文件大小和检测到更改的日期。

你知道我可以通过名称而不是文件夹中的顺序来比较文件的方法吗?感谢您抽出一些空闲时间来帮助我。

  var sh = SpreadsheetApp.getActiveSheet();
  var folder1 = DriveApp.getFolderById('1bClALidaF9pYgENndpmD_mpvqgcD_tPx'); // archives
  var folder2 = DriveApp.getFolderById('1IediXKEC_vJJSIyObOPwrpqEbaDPuRCa'); // to_compare
  var list1 = [];
  var list2 = [];
  var list3 = [];
  var list4 = [];
  var files1 = folder1.getFiles();
  var files2 = folder2.getFiles();
  var now = new Date();
  while (files1.hasNext() && files2.hasNext()){
    var file1 = files1.next();
    var file2 = files2.next();
    list1.push([file1.getName()]);
    list2.push([file2.getName()]);
    list3.push([file1.getSize()]);
    list4.push([file2.getSize()]);
  }
  sh.getRange(1,2,list1.length,1).setValues(list1);
  sh.getRange(1,3,list2.length,1).setValues(list2);
  sh.getRange(1,4,list3.length,1).setValues(list3);
  sh.getRange(1,5,list4.length,1).setValues(list4);
  const equals = (a, b) => JSON.stringify(a) === JSON.stringify(b);

  var i=0;
  //gathering values of filesize 1 & 2 and comparing them
  for (i > 0;i<list1.length;i++){
    var a= sh.getRange("d1:d48").getValues(); 
    var b= sh.getRange("e1:e48").getValues();
    
    
    if(!equals(a, b)) //if the filesize is not the same, then...
    {
      sh.getRange(i+1,6).setBackground("red")
      sh.getRange(i+1,6).setValue("something has changed here...")
      sh.getRange(i+1,7).setValue(now)
      //++sending an email to team
    }
    else{
      sh.getRange(i+1, 6).setBackground("green")
      sh.getRange(i+1, 6).setValue("everything's ok!")
    }
  } 

既然你把它们放在四个相邻的列中,为什么不这样:

list1.push([file1.getName(),file2.getName(),file1.getSize(),file2.getSize()]);

然后

sh.getRange(1,2,list1.length,4).setValues(list1);

您可以在电子表格中将它们排序为一个范围,或者通过 .sort() 方法在数组中使用比较函数对它们进行排序。

再次感谢您的回答。但是应用.sort()方法后,似乎只有存档文件夹在排序...

这是我的代码:

function file_comparison(){
  var sh = SpreadsheetApp.getActiveSheet();
  var folder1 = DriveApp.getFolderById('ID1'); // archives
  var folder2 = DriveApp.getFolderById('ID2'); // to_compare
  var list1 = [];
  var files1 = folder1.getFiles();
  var files2 = folder2.getFiles();
  var now = new Date();
  while (files1.hasNext() && files2.hasNext()){
    var file1 = files1.next();
    file1.setDescription("archives")
    var file2 = files2.next();
    file2.setDescription("to_compare")
    list1.push([file1.getName(),file2.getName(),file1.getSize(),file2.getSize()]);
    list1.sort();
  }
  sh.getRange(1,2,list1.length,4).setValues(list1);
  const equals = (a, b) => JSON.stringify(a) === JSON.stringify(b);

  var i=0;
  //gathering values of filesize 1 & 2 and comparing them
  for (i > 0;i<list1.length;i++){
    var a= sh.getRange("d1:d48").getValues(); 
    var b= sh.getRange("e1:e48").getValues();
    
    
    if(!equals(a, b)) //if the filesize is not the same, then...
    {
      //alert
    }
    else{
     //else...
    }
  }```