由于 DocsList 的弃用,此答案已更新,现在始终使用 DriveApp 方法。
您必须先取消垃圾文件,然后才能移动它,但这样做会完成您所追求的。这是算法:
- 获取所有已删除文件的文件列表(或文件 ID)
- 对于每个文件,
- 取消删除/取消垃圾文件
- 将文件移动到目标文件夹(详细信息:从原始文件夹中删除文件,添加到目标恢复文件夹)
这个答案提供了脚本片段来完成这个;完整的脚本可作为gist中的 Google 表格插件提供,包括菜单和 UI 元素。
恢复所有已删除的文件
此函数用于DriveApp.search()
获取所有已删除文件的列表,然后将它们恢复到指定的文件夹中,rescueFldr
如果不存在则将创建该文件夹。
/**
* Untrash then move all trashed files to rescue folder.
* From: http://stackoverflow.com/a/14541247/1677912
*
* @returns {Number} Count of Rescued files.
*/
function rescueAllFiles() {
// Find or create target folder
var rescueFldrIterator = DriveApp.getFoldersByName(rescueFldrName);
var rescueFldr = rescueFldrIterator.hasNext() ? rescueFldrIterator.next() : DriveApp.createFolder(rescueFldrName);
// Get file iterator with all trashed files
var trashed = DriveApp.searchFiles('trashed=true');
var count = 0;
while (trashed.hasNext()) {
var file = trashed.next();
// Untrash the file
if (rescueFile( file, rescueFldr )) count++;
}
return(count);
};
恢复特定的垃圾文件
如果您想更好地控制将要恢复的文件,并且不能简单地修改上面使用的搜索参数,另一种方法可能是在电子表格中列出文件 ID,并让脚本将其用作输入.
用已删除的文件填充电子表格
/**
* Get array of files in user's Google Drive trash, and write
* into currently active sheet.
* From: http://stackoverflow.com/a/14541247/1677912
*
* @returns {Object[]} Array of DriveApp file objects
*/
function getTrashedFiles() {
var trashedSearch = DriveApp.searchFiles('trashed=true');
var files = [];
files.push(["ID","File Name","Type","URL"]);
while (trashedSearch.hasNext()) {
var file = trashedSearch.next();
files.push([file.getId(),file.getName(),docTypeToText_(file.getMimeType()),file.getUrl()]);
}
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
sheet.getRange(1, 1, files.length, files[0].length)
.setValues(files);
return files;
}
手动文件 ID 收集
(自动检索的替代方法,仅供参考。)既然你只是这样做了一次,那么让我们作弊吧。在文件列表页面的底部,使用 API Explorer 检索所有已删除文件的 ID!
如果您从脚本调用 API,则会显示输出,就像您收到的一样。
将输出剪切并粘贴到文本文件中,然后将其剥离为文件 ID。(我是用 gvim 完成的,它只需要几个命令。)将结果保存为 csv 文件,并将其作为电子表格拉入云端硬盘。这就是它的样子。(一定要包含一个标题行;脚本假设有一个。)
处理垃圾文件
现在已删除文件的列表在电子表格中,编写恢复和移动脚本很容易。
/**
* Untrash then move files listed in spreadsheet to rescue folder.
* From: http://stackoverflow.com/a/14541247/1677912
*
* @returns {Number} Count of Rescued files.
*/
function rescueListedFiles() {
var fileList = SpreadsheetApp.getActiveSheet()
.getDataRange().getValues()
.splice(1); // Skip header line
// Find or create target folder
var rescueFldrIterator = DriveApp.getFoldersByName(rescueFldrName);
var rescueFldr = rescueFldrIterator.hasNext() ? rescueFldrIterator.next() : DriveApp.createFolder(rescueFldrName);
var count = 0;
for (var i=0; i<fileList.length; i++) {
var fileId = fileList[i][0];
var file = DriveApp.getFileById(fileId);
// Untrash the file
if (rescueFile( file, rescueFldr )) count++;
}
return( count );
};