Javascript 将Google Drive上的重复文件与GAS进行比较时出现问题
我希望下面的GAS会删除给定文件夹中同名的文件。另一个循环中的循环应将所有文件与所有文件进行比较,但它不进行比较 由于文件夹中有5个文件,脚本应该进行5x5次比较,但它只进行5次比较。我的错在哪里 代码: 电流输出: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
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
- 当文件名重复时,您希望将文件移动到垃圾箱
- 您希望使用谷歌应用程序脚本实现这一点
- 在脚本中,将比较文件对象而不是文件名,如
。在这种情况下,if语句总是file===file\uu
。为了比较文件名,请使用false
。这一点我已经提过了(file.getName()==file.getName())
返回文件迭代器。在这种情况下,第二个while循环只是一个循环。这样,脚本就无法删除文件名重复的文件。因此,我想提出以下示例脚本getFiles()
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;
}
}
}