Javascript 将Google Drive上的重复文件与GAS进行比较时出现问题

Javascript 将Google Drive上的重复文件与GAS进行比较时出现问题,javascript,google-apps-script,google-drive-api,Javascript,Google Apps Script,Google Drive Api,我希望下面的GAS会删除给定文件夹中同名的文件。另一个循环中的循环应将所有文件与所有文件进行比较,但它不进行比较 由于文件夹中有5个文件,脚本应该进行5x5次比较,但它只进行5次比较。我的错在哪里 代码: 电流输出: file: File1.pdf = file_: File1.pdf file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA file: F

我希望下面的GAS会删除给定文件夹中同名的文件。另一个循环中的循环应将所有文件与所有文件进行比较,但它不进行比较

由于文件夹中有5个文件,脚本应该进行5x5次比较,但它只进行5次比较。我的错在哪里

代码:

电流输出:

file: File1.pdf = file_: File1.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA
file: File1.pdf = file_: File2.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1LY68d1aP9DLe5LqkzZyCJVdQIAm9XzzY
file: File1.pdf = file_: File2.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 19tKdBNt5bzxAOfcO1n14a_DbjWLb-LN-
file: File1.pdf = file_: File1.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1Quwyi6WIP0dt3qgV4S5XJof1wMu9mRP1
file: File1.pdf = file_: File1.pdf
file.getId(): 1yyFlRAGISjKstVxPRu8Eqi4iCIYJGDZA = file_.getId(): 1fjMu1NEJu9ZI3aFhYpFyLkw_o79KiTQa
  • 当文件名重复时,您希望将文件移动到垃圾箱
  • 您希望使用谷歌应用程序脚本实现这一点
修改点:
  • 在脚本中,将比较文件对象而不是文件名,如
    file===file\uu
    。在这种情况下,if语句总是
    false
    。为了比较文件名,请使用
    (file.getName()==file.getName())
    。这一点我已经提过了
  • getFiles()
    返回文件迭代器。在这种情况下,第二个while循环只是一个循环。这样,脚本就无法删除文件名重复的文件。因此,我想提出以下示例脚本
示例脚本: 作为其他模式,下面的脚本如何?在这种情况下,使用一个循环。因此,与上述修改脚本相比,可以降低处理成本

function setTrashedDuplicatedFiles(){
  var folder = DriveApp.getFolderById("1FfbNvPQpg6Ilx-5VLuSIePvpl-FxewFl");
  var files = folder.getFiles();

  let fileObj = {};
  while (files.hasNext()) {
    const file = files.next();
    const filename = file.getName();
    if (filename in fileObj) {
      file.setTrashed(true);
    } else {
      fileObj[filename] = file;
    }
  }
}
参考:

此外,
文件===文件
将不起作用。不同的对象永远不相等
toString()
可能会起作用,但我认为,即使文件名不同,这些字符串也可能不同,修改后的脚本也不会起作用。对于
文件1
,将循环
文件1
文件5
。但是对于
文件#2
,将不会有剩余的
文件
要循环(
文件
对于第二个外部循环
文件
循环将为false)@master感谢您的评论。从你的评论中,我注意到了我答案的修改点。所以我更新了它。你能确认一下吗?因此,我只提出了示例脚本。为了使用OP的脚本,例如,当文件名为
File1.pdf
File1.pdf
File1.pdf
File1.pdf
File2.pdf
,我认为它会起作用。因为在这种情况下,工作只能通过一个循环完成。再次感谢各位。那很好用。很好的逻辑。我只是想向其他用户突出显示我想使用此代码的其他用户,您可能需要为应用程序启用新的V8运行时脚本,以便使用
let
declation:转到GAS editor,然后“Run”菜单,最后单击“启用ChromeV8提供的新应用脚本运行时”,现在你们都准备好了。@Cleber Marques谢谢你们的回复。我很高兴你的问题解决了。
function setTrashedDuplicatedFiles(){
  var folder = DriveApp.getFolderById("1FfbNvPQpg6Ilx-5VLuSIePvpl-FxewFl");
  var files = folder.getFiles();

  let fileObj = {};
  while (files.hasNext()) {
    const file = files.next();
    const filename = file.getName();
    if (filename in fileObj) {
      file.setTrashed(true);
    } else {
      fileObj[filename] = file;
    }
  }
}