gpt4 book ai didi

google-apps-script - 谷歌驱动器重复文件

转载 作者:行者123 更新时间:2023-12-01 16:54:18 24 4
gpt4 key购买 nike

我有这段代码可以删除重复的文件,但它没有按预期工作,它位于电子表格上,您转到工具并单击脚本管理器,然后为您提供三个按钮

启动进程

标记重复项

删除重复项

第一个检索文件,第二个将重复文件变成浅红色,第三个据说会删除它们并将它们变成红色,尽管它所做的只是将它们变成黄色,而我不知道在哪里要找到错误,请有人帮助我

function startProcess(){
PropertiesService.getScriptProperties().deleteAllProperties();
try{
ScriptApp.deleteTrigger(ScriptApp.getProjectTriggers()[0]);
}catch(e){}
var sh = SpreadsheetApp.getActiveSheet();
sh.getDataRange().clear();
sh.getRange(1,1,1,4).setValues([['fileName (logged @'+Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'MMM-dd-yyyy HH:mm')+')','fileSize','parent folders tree','fileID']]);
var trig = ScriptApp.newTrigger('getDriveFilesList_').timeBased().everyMinutes(5).create();
Logger.log(trig.getUniqueId()+' '+trig.getHandlerFunction());
getDriveFilesList_();
}

function getDriveFilesList_(){
var content = [];
var startTime = new Date().getTime();
var sh = SpreadsheetApp.getActiveSheet();
if( ! PropertiesService.getScriptProperties().getProperty('numberOfFiles')){
PropertiesService.getScriptProperties().setProperty('numberOfFiles',0);
}

var numberOfFiles = Number(PropertiesService.getScriptProperties().getProperty('numberOfFiles'));
Logger.log(numberOfFiles);
var max = numberOfFiles+10000;
if( ! PropertiesService.getScriptProperties().getProperty('continuationToken')){
var files = DriveApp.getFiles();
// var files = DriveApp.getFolderById('0B3qSFd_____MTFZMDQ').getFiles();// use this line and comment the above if you want to process a single folder
// use your chozen folder ID of course (available from the browser url , the part after "https://drive.google.com/?authuser=0#folders/")
}else{
var files = DriveApp.continueFileIterator(PropertiesService.getScriptProperties().getProperty('continuationToken'))
}
while(files.hasNext() && numberOfFiles<(max)){
var file = files.next()
if(file.getSize()>0){
numberOfFiles++;
var folder = '(shared)';
if(file.getParents().hasNext()){folder = getTree_(file)}
content.push([file.getName(),file.getSize(),folder,file.getId()])
}
if(new Date().getTime()-startTime > 250000){break};
}
sh.getRange(sh.getLastRow()+1,1,content.length,content[0].length).setValues(content);
if(!files.hasNext()){ScriptApp.deleteTrigger(ScriptApp.getProjectTriggers()[0]);Logger.log('done !'); sh.getRange(sh.getLastRow()+1,1).setValue('All files processed ('+numberOfFiles+' found)')};
var continuationToken = files.getContinuationToken()
PropertiesService.getScriptProperties().setProperty('numberOfFiles',numberOfFiles);
PropertiesService.getScriptProperties().setProperty('continuationToken',continuationToken);
}

function markDuplicates(){
handleDuplicates_(false)
}

function trashDuplicates(){
handleDuplicates_(true)
}

function handleDuplicates_(trash){
var sh = SpreadsheetApp.getActiveSheet();
sh.setFrozenRows(1);
sh.sort(1);
var data = sh.getDataRange().getValues()
var headers = data.shift()
var lastComment = data.pop();
var toDelete = [];
var item = data[0];
for(var n=1 ; n<data.length; n++){
if(data[n][0]==item[0] && data[n][1]==item[1]){
toDelete.push('delete '+ n);
}
item=data[n];
}
var marker = sh.getRange(2,1,data.length,1).getBackgrounds();
for(var n in data){
if(!trash){marker.push(['#FFF'])};
if(toDelete.indexOf('delete '+n)>-1 && !trash){
marker[n][0] = '#F99';
}
if(toDelete.indexOf('delete '+n)>-1 && trash){
if(marker[n][0]==='#ff9999'){
try{
DriveApp.getFileById(data[n][3]).setTrashed(trash);
marker[n][0] = '#F33';
}catch(err){Logger.log(err)}
}else{
marker[n][0] = '#FF9'; 3
}
}
}
sh.getRange(2,1,marker.length,1).setBackgrounds(marker);
}

function getTree_(file){
var tree = [];
var folderP = file.getParents()
while (folderP.hasNext()){
var folder = folderP.next();
folderP = folder.getParents();
tree.push(folder.getName());
}
return tree.reverse().join('/');
}

最佳答案

我在您的代码中发现了一些问题,因此我创建了一个新的 ajrHandleDuplicates_() ,它似乎可以满足您的要求。我只从单个文件夹运行了简单的测试,并且禁用了继续触发器。

您可以从 this sheet 运行脚本(并获取副本,尽管您具有编辑权限)并且您可以将文件放入 this folder对其进行测试(您将看到我上次测试的结果)。我在桌面上创建了一个小文本文件,然后将其放入并重命名。

关于google-apps-script - 谷歌驱动器重复文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28485536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com