长话短说我被CryptoLocker病毒感染了。我的“普通”本地文件不是问题,因为我备份了这些文件。但我使用的是Google云端硬盘同步客户端,我的所有云端硬盘文件都已加密。我没有支持它们,因为我认为Google Drive是保存的,我的数据存储在世界各地(我知道我的错)。
现在我可以看到Google云端硬盘提供版本控制。这意味着我的旧上传仍在服务器上。我可以按文件恢复以前的版本文件但是有几千个文件,祝你好运。 我联系了Google G Suite支持小组(我正在为我的公司使用Google G Suite)并询问他们是否可以在一次批量操作中恢复最新版本。答案是“你不必按文件归档”。因此,我正在检查互联网上的脚本,工具等。
我在Google云端硬盘帮助论坛“https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0”中找到了Google Apps脚本。
1)我将“Google Apps Script”应用添加到了我的驱动器中。
2)我创建了一个新的应用程序并通过了脚本:
function testSmallFolder() {
var smallFolder = DriveApp.getFolderById('FOLDER_ID_HERE');
var files = smallFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
var childFolders = smallFolder.getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
Logger.log(childFolder.getName());
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
}
function deleteRevisions(file)
{
var fileId = file.getId();
var revisions = Drive.Revisions.list(fileId);
if (revisions.items && revisions.items.length > 1)
{
for (var i = 0; i < revisions.items.length; i++)
{
var revision = revisions.items[i];
var date = new Date(revision.modifiedDate);
var startDate = new Date();
var endDate = new Date(revision.modifiedDate);
var fileName = Drive.Files.get(fileId);
if(revision.modifiedDate > "2017-02-16T10:00:00" && revision.modifiedDate < "2017-02-18T10:00:00" && revision.lastModifyingUserName == "ENTER_MODIFIED_USERNAME_HERE]]" && file.getName() !== "HELP_DECRYPT.URL" && file.getName() !== "HELP_DECRYPT.PNG" && file.getName() !== "HELP_DECRYPT.HTML")
{
Logger.log(' %s, Date: %s, File size (bytes): %s',file.getName(),
date.toLocaleString(),
revision.fileSize);
return Drive.Revisions.remove( fileId, revision.id);
}
}
} else
{
Logger.log('No revisions found.');
}
}function getSubFoldersAndDelete(parent)
{
parent = parent.getId();
var childFolders = DriveApp.getFolderById(parent).getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
return;
}
3)该脚本提供3个函数“testSmallFolder”/“deleteRevisions”/“getSubFoldersAndDelete”。看起来功能“festSmallFolder”可以只对某个文件夹起作用。第2行:FOLDER_ID_HERE
4)我创建了一个文件夹并将我的文件移到了这个文件夹中。之后我获得了文件夹ID(URL)并将其添加到脚本中。
5)在第37行,您可以添加修改的开始和结束日期。我还在同一行调整了用户名。
6)我保存了脚本并运行了“testSmallFolder”函数。
7)我收到一条错误消息:“ReferenceError:”Drive“未定义。 (第27行,文件“代码”)“。 第27行看起来像这样:“var revisions = Drive.Revisions.list(fileId);”。
我再次联系了Google G Suite支持,并就此错误向他们寻求帮助。他们的回答是“抱歉,我们不支持脚本。”
现在我在这里,请你帮忙。也许我们可以让这个脚本运行,以便我可以恢复我的文件的最新工作版本。
我非常感谢您提供的任何帮助。
答案 0 :(得分:0)
首先,您必须确保启用高级驱动器服务,如下所示: https://developers.google.com/apps-script/advanced/drive 进入您的脚本页面,点击资源 - &gt;然后单击Google Advances Services,然后启用(必须是GREEN!)Drive API。 也许一个警告打开你的页面,你必须使脚本能够访问你的驱动器和文件夹(我想这是第一次)。 执行此操作后,如果在脚本的第二行放置一个断点并在构造之后运行调试器,则通过27行没有任何问题,并且您可以在变量堆栈中看到第一个文件的所有字符串,然后对于第二个...... 停止然后这次正常运行,一切都会好的。 祝你晚安。