比较两个 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...
}
}```
大家好,互联网上的人们,这是我第一次 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...
}
}```