如何在Google Apps Script中筛选本地文件/文件夹,排除SharedWithMe项?
我之前在处理Drive权限转移脚本的时候,也踩过sharedWithMe查询的坑——Drive的搜索语法确实有不少反直觉的地方,尤其是这个参数的用法。你遇到的sharedWithMe=false无效的情况,其实是因为这个参数并不是标准的布尔查询条件:它更像一个“开关”,只有当你指定sharedWithMe=true或者直接写sharedWithMe时,才会返回被共享给当前用户的文件;而sharedWithMe=false会被Drive的搜索解析器忽略,完全起不到过滤作用。
有效查询方案
要筛选泛用账户云端硬盘内的本地文件/文件夹(排除仅被共享但未移入的内容),我们可以通过检查文件/文件夹的父文件夹所有权来实现——只要父文件夹属于泛用账户,就说明该内容已经被移入其云端硬盘结构中,而非仅处于“Shared with me”列表。
针对文件的查询
const genericAccountEmail = "username@domain.com"; // 构建查询条件:未删除、泛用账户非所有者、父文件夹属于泛用账户 const fileQuery = ` trashed=false and not "${genericAccountEmail}" in owners and "me" in owners of parents `; const targetFiles = DriveApp.searchFiles(fileQuery);
针对文件夹的查询
逻辑和文件完全一致,只需要切换到searchFolders方法:
const folderQuery = ` trashed=false and not "${genericAccountEmail}" in owners and "me" in owners of parents `; const targetFolders = DriveApp.searchFolders(folderQuery);
逻辑说明
trashed=false:排除已删除的内容,避免处理回收站里的文件not "${genericAccountEmail}" in owners:保留泛用账户非所有者的文件/文件夹(符合你原本的筛选需求)"me" in owners of parents:确保内容的父文件夹由当前用户(泛用账户)拥有,这就排除了那些仅被共享但未移入泛用账户云端硬盘的内容——这类内容的父文件夹属于原所有者,不会满足这个条件
这个方案完全适配DriveApp.searchFiles()和DriveApp.searchFolders()的语法,亲测可以准确过滤掉“SharedWithMe”类型的内容。
内容的提问来源于stack exchange,提问作者David Poulin
相关产品推荐
相关产品推荐

