美好的一天。我试图获取文件夹和子文件夹中的所有文件并删除它们,但代码不起作用,它只遍历第一个子文件夹,并且其中没有文件,脚本结束,请帮助。
function DeleteInvoices() {
var folder = DriveApp.getFolderById("1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e");
var fl = folder.getFolders();
while (fl.hasNext()) {
var files = fl.next();
Logger.log(files)
var fs = files.getFiles();
while (fs.hasNext()) {
var fss = fs.next();
fss.setTrashed(true)
}
}
}
最佳答案
我相信您的目标如下。
- 您想要删除
1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e
文件夹中的所有文件。- 在这种情况下,您希望将文件删除到垃圾箱。
1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e
文件夹有子文件夹,您想要删除所有子文件夹中的所有文件夹。- 您不想删除子文件夹。
修改点:
- 在您的脚本中,我认为会检索
1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e
文件夹下的文件夹中的文件。- 例如,如果
1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e
的文件夹有 2 个文件夹,并且这 2 个文件夹有 1 个文件和 1 个文件夹,每个文件夹中有 1 个文件,则您的脚本将检索 2 个文件。因为该脚本从1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e
文件夹下的文件夹中检索文件。
- 例如,如果
- 为了遍历
1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e
中的所有子文件夹,需要使用递归循环扫描所有文件夹,包括1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e
中的子文件夹。
当以上几点反射(reflect)到脚本中时,就会变成如下。
修改后的脚本:
function DeleteInvoices() {
const getAllFiles = folder => {
const files = folder.getFiles();
while (files.hasNext()) {
const file = files.next();
console.log(file.getName());
file.setTrashed(true);
}
const folders = folder.getFolders();
while (folders.hasNext()) getAllFiles(folders.next());
}
var folder = DriveApp.getFolderById("1-2VAPBzEQxCaoN7KGSB_K_peiLIDk32e");
getAllFiles(folder);
}
- 在此脚本中,使用
getAllFiles
函数扫描所有子文件夹中的所有文件,并删除文件。 (它们被移至垃圾箱。) - 已删除文件的文件名显示在控制台中。
注意:
- 在此脚本中,请在启用 V8 运行时的情况下使用它。
- 当文件数量很大时,首先会检索文件 ID,下一步可能适合使用批量请求来删除文件。 Ref
引用文献:
关于file - 如何最好地删除文件夹及其子文件夹中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65407497/