Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 应用程序脚本-自动从Google Drive删除超过3天的文件-获取文件列表_Javascript_File_Date_Google Apps Script_Google Drive Api - Fatal编程技术网

Javascript 应用程序脚本-自动从Google Drive删除超过3天的文件-获取文件列表

Javascript 应用程序脚本-自动从Google Drive删除超过3天的文件-获取文件列表,javascript,file,date,google-apps-script,google-drive-api,Javascript,File,Date,Google Apps Script,Google Drive Api,我用我的谷歌硬盘在家里存储IP摄像头的运动检测记录。我正在运行以下脚本(稍加修改),以自动从我的Google Drive中删除3天以上的文件: 脚本设置为每天早上5点左右运行。我遇到的问题是,当有太多的文件要删除时,我会收到一个错误,说我已经超过了最大写入速率。这是因为set-trashed命令包含在for循环中。如果我添加一个睡眠来减慢循环,那么我会收到另一个错误,说脚本没有在允许的时间内完成 我可能只需要运行两三次,但那太笨重了 如何修改此脚本,使其创建要删除的文件的临时列表,并在最终退出

我用我的谷歌硬盘在家里存储IP摄像头的运动检测记录。我正在运行以下脚本(稍加修改),以自动从我的Google Drive中删除3天以上的文件:

脚本设置为每天早上5点左右运行。我遇到的问题是,当有太多的文件要删除时,我会收到一个错误,说我已经超过了最大写入速率。这是因为set-trashed命令包含在for循环中。如果我添加一个睡眠来减慢循环,那么我会收到另一个错误,说脚本没有在允许的时间内完成

我可能只需要运行两三次,但那太笨重了


如何修改此脚本,使其创建要删除的文件的临时列表,并在最终退出循环时执行删除?我对GAS语言和语法没有太多的经验,所以细节将非常棒。

此代码将返回所有超过30天的文件的文件ID。它与另一篇文章中引用的代码非常不同。您正在使用的代码中有一个已弃用的类DocsList现在不推荐使用。我给您的代码使用了DriveApp,并使用了
searchFiles()
方法

gs脚本 将打印检索到的文件的日期

上面的代码不会删除任何文件,也不会将任何内容设置为垃圾。它只是按日期搜索文件,并创建一个包含所有文件ID的数组

因此,删除或丢弃文件的函数可以首先调用该函数,并获得所有要处理的文件ID的列表

最好在不删除任何文件的情况下测试代码,以确保代码在运行删除任何文件的版本之前获得正确的文件

如果要删除文件而不先将其设置为“垃圾”,则可以这样做

下面的示例使用高级Google Drive服务。有关启用高级驱动器服务的当前方式,请参阅文档

//To delete a file without first sending it to the trash requires the Advanced Drive API to be enabled

function deleteFile(idToDLET) {
  idToDLET = 'the File ID';
  
  //This deletes a file without needing to move it to the trash
  var rtrnFromDLET = Drive.Files.remove(idToDLET);
}
要调用获取要删除的文件ID的函数,如下所示:

警告这将删除文件而不将其发送到垃圾箱!***确保您知道要删除的内容!
函数deleteFiles(){
var arrayIDs=getFilesByDate();
对于(var i=0;i
我想出了另一个解决方案。这仅在谷歌硬盘文件与硬盘同步时有效

如果您的Google Drive文件与硬盘同步,那么如果您在本地硬盘文件夹中删除它们,它们也将从Google Drive中删除。因此,接下来的任务就是如何从Google文件夹中自动删除超过X天的文件

这是一个Windows Powershell脚本,允许您执行以下操作:

使用此配置运行脚本:

powershell -file c:\users\owner\documents\windows\deleteold\deleteold.ps1 -FolderPath "C:\Users\owner\Google Drive\iSpy\video\Bedroom" -FileAge 30 -logfile c:\users\owner\documents\windows\deleteold\logs\Bedroom.log -CreateTime -NoFolder
我可以从同步的谷歌硬盘“卧室”文件夹中删除所有超过30天的iSpy文件

遵循以下说明:

我能够使用Windows任务调度器自动运行脚本


问题解决。

使用Sandy在上面发布的解决方案,我将其修改为特定于文件夹

function getOldFileIDs() {
  var fileIDs = [];
  // Old date is 30 days
  var oldDate = new Date().getTime() - 3600*1000*24*30;
  var cutOffDate = Utilities.formatDate(new Date(oldDate), "GMT", "yyyy-MM-dd");

  // Get folderID using the URL on google drive
  var folder = DriveApp.getFolderById('XXXXXXX');
  var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');

  while (files.hasNext()) {
    var file = files.next();
    fileIDs.push(file.getId());
    Logger.log('ID: ' + file.getId() + ', Name: ' + file.getName());
  }
  return fileIDs;
};

function deleteFiles() {
  var fileIDs = getOldFileIDs();
  fileIDs.forEach(function(fileID) {
    DriveApp.getFileById(fileID).setTrashed(true);
  });
};
函数getOldFileIDs(){ var fileIDs=[]; //旧的日期是30天 var oldDate=new Date().getTime()-3600*1000*24*30; var截止日期=Utilities.formatDate(新日期(旧日期),“GMT”,“yyyy-MM-dd”); //使用google drive上的URL获取folderID var folder=DriveApp.getFolderById('XXXXXXX'); var files=folder.searchFiles('modifiedDate<'+截止日期+'”); while(files.hasNext()){ var file=files.next(); push(file.getId()); Logger.log('ID:'+file.getId()+',Name:'+file.getName()); } 返回文件ID; }; 函数deleteFiles(){ var fileIDs=getOldFileIDs(); forEach(函数(fileID){ DriveApp.getFileById(fileID).setTrashed(true); }); };
如果您通过Google Drive同步了文件,您可以尝试FileSysWatcher:我成功地将其与第一个和最后一个函数一起使用,但我不确定我是否理解倒数第二个函数的用途(“idToDLET”代码)…名为
deleteFile
的函数仅删除一个文件并获取文件id的输入参数。另一个函数删除多个文件。你可以用一个或另一个。啊,我明白了,谢谢。我把它安装好了,它在一段时间内工作得很好。然后我突然注意到脚本文件丢失了,并且没有再删除任何内容。脚本是否可能在超过阈值时删除自身?你知道我如何排除它,这样它就不会被删除吗?
function deleteFiles() {
  var arrayIDs = getFilesByDate();
  
  for (var i=0; i < arrayIDs.length; i++) {
    Logger.log('arrayIDs[i]: ' + arrayIDs[i]);
    //This deletes a file without needing to move it to the trash
    var rtrnFromDLET = Drive.Files.remove(arrayIDs[i]);
  }
};
powershell -file c:\users\owner\documents\windows\deleteold\deleteold.ps1 -FolderPath "C:\Users\owner\Google Drive\iSpy\video\Bedroom" -FileAge 30 -logfile c:\users\owner\documents\windows\deleteold\logs\Bedroom.log -CreateTime -NoFolder
function getOldFileIDs() {
  var fileIDs = [];
  // Old date is 30 days
  var oldDate = new Date().getTime() - 3600*1000*24*30;
  var cutOffDate = Utilities.formatDate(new Date(oldDate), "GMT", "yyyy-MM-dd");

  // Get folderID using the URL on google drive
  var folder = DriveApp.getFolderById('XXXXXXX');
  var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');

  while (files.hasNext()) {
    var file = files.next();
    fileIDs.push(file.getId());
    Logger.log('ID: ' + file.getId() + ', Name: ' + file.getName());
  }
  return fileIDs;
};

function deleteFiles() {
  var fileIDs = getOldFileIDs();
  fileIDs.forEach(function(fileID) {
    DriveApp.getFileById(fileID).setTrashed(true);
  });
};