javascript - 将 Google Drive 上的重复文件与 GAS 进行比较时出现问题
问题描述
我希望下面的 GAS 删除给定文件夹中具有相同名称的文件。另一个循环内的循环应该将所有文件与所有文件进行比较,但事实并非如此。
由于文件夹中有 5 个文件,脚本应该进行 5x5 比较,但它只有 5 个。我的错在哪里?
代码:
function setTrashedDuplicatedFiles(){
var folder = DriveApp.getFolderById("1FfbNvPQpg6Ilx-5VLuSIePvpl-FxewFl");
var files = folder.getFiles();
var files_ = folder.getFiles();
while (files.hasNext())
{
var file = files.next()
while (files_.hasNext())
{
var file_ = files_.next()
Logger.log("file: " + file + " = " + "file_: " + file_)
Logger.log("file.getId(): " + file.getId() + " = " + "file_.getId(): " + file_.getId())
if((file === file_) && (file.getId() != file_.getId()))
{
file.setTrashed(true)
}
}
}
}
电流输出:
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
解决方案
- 当文件名重复时,您想将文件移动到垃圾箱。
- 您想使用 Google Apps 脚本实现此目的。
修改点:
- 在您的脚本中,比较文件对象而不是文件名,如
file === file_
. 在这种情况下,if 语句总是false
. 为了比较文件名,请使用(file.getName() === file_.getName())
. TheMaster的评论已经提到了这一点。 getFiles()
返回 FileIterator。在这种情况下,您的第二个 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;
}
}
}
参考:
推荐阅读
- python - 无法使用请求从网页中获取所有表格内容
- vue.js - 如何在列表上设置 Vuetify 分页
- asp.net-core - 如何在 Asp.Net Core 的 JsonResult 中返回错误状态?
- r - 使用自动绘图功能增加轴刻度的数量(时间序列数据)
- python - Beautifulsoup 为文本和链接解析 html 表
- spring - 是否可以将 spring.cloud.config 配置为使用多个 bootstrap.yml 文件
- python - OSX 中的 wxPython 4.0.6 - 单击菜单栏图标不会触发事件
- reactjs - React keycloak TypeError: kc.updateToken(...).success 不是函数
- java - Karaf 中 PersistenceProviderImpl 的 ClassCastException
- c# - 尝试删除 Azure blob - 获取 blob 不存在异常