我需要在我的谷歌驱动的垃圾目前移动所有文件到特定的文件夹,或者,如果不能做到,他们恢复到原来的位置。 一些乱七八糟的事情,我有在垃圾桶有价值的文件,有6演出当中,所以我宁愿他们在本地移动到一个单独的目录,备份或同步,后来看到这些文件。
这是剧本我到目前为止有:
function moveFilesFromTrash() {
var pageSize = 200;
var files = null;
var token = null;
var cestisti = DocsList.getFolder('cestisti');
do {
var result = DocsList.getAllFilesForPaging(pageSize, token);
files = result.getFiles();
token = result.getToken();
for (var i = 0; i < files.length; i++) {
if (files[i].isTrashed == true) {
Logger.log(files[i].getName());
// files[i].setTrashed(false)
files[i].addToFolder(cestisti);
}
} while (files.length == pageSize);
}
这件事是它是行不通的。
代码页的文件,通过项目的一部分工作,我是从我的其他工作的脚本。 我只是不知道,如果它解析垃圾文件夹或标签。 我不知道是否setTrashed()
或addtofolder()
的作品-我不知道。 现在,前者被注释掉了,因为我宁愿直接复制恢复他们的项目,但如果这是不可能的,我可以恢复。
这个答案已经由于已超出DocsList的折旧更新,现在使用DriveApp方法贯穿始终。
您必须取消回收站的文件,然后才能移动它,但这样做将完成你以后。 这里的算法:
- 获取文件(或文件ID)的列表中的所有文件丢弃
- 对于每个文件,
- 取消删除/取消垃圾文件
- 移动文件到目标文件夹(详细:删除原始文件夹文件,添加到目标文件夹恢复)
这个答案提供了脚本来完成这个的片段; 完整的脚本可作为谷歌表格插件的要点 ,完整的菜单和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;
}
手册文件标识集合
(替代自动检索,仅供参考。)因为你只是这样做会一次,不过,让我们欺骗。 在文件列表页面的底部,使用API浏览器检索您的所有被删除的文件的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 );
};
尝试,如果(文件[I] .isTrashed()==真)
我建议你把一些诊断(Logger.log)来缩小问题
请记住,文件不是在文件夹中。 文件有所谓的文件夹,并可以有多个文件夹(标签)的标签。 即使是“丢弃”的标签。 设置只是垃圾创建一个丢弃的标签,它覆盖其他标签(文件夹)。 下面的代码不动任何东西。 它只是重置标签(文件夹)编辑:已删除不是一个标签,而是一个条件:一切持有
for (var i = 0; i < files.length; i++) {
if (files[i].isTrashed()) { // don't forget ()
Logger.log(files[i].getName());
var folders = files[i].getParents();
// remove existing folders(labels)
for(var f = 0; f < folders.length; f++ ) {
files[i].removeFromFolder( folders[f] );
};
// remove trashed label
files[i].setTrashed(false);
// add cestisti label(add to cestisti folder)
files[i].addToFolder(cestisti);
}
}