6

tôi có mã này để xóa các file trùng lặp nhưng nó không hoạt động như mong muốn, Đó là trên một bảng tính và bạn đi vào các công cụ và click vào quản lý kịch bản và cung cấp cho bạn ba nútGoogle Drive file trùng lặp

StartProcess

dấu bản sao

deleteDuplicates

Người đầu tiên truy xuất các tệp, tệp thứ hai sẽ chuyển các tệp trùng lặp bằng màu đỏ nhạt và tệp thứ ba được cho là xóa chúng và biến chúng thành Đỏ, mặc dù những gì nó đang làm là biến chúng thành màu vàng và tôi không thể tìm thấy sai lầm, xin vui lòng ai đó giúp tôi

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('/'); 
} 
+0

Chia sẻ bảng tính bạn đang làm việc. Cảm ơn – KRR

+0

Đây là liên kết tạo một bản sao để nó có thể hoạt động trên ổ đĩa của bạn https://docs.google.com/spreadsheet/ccc?key=0Aj0cW5YX5rvcdHBHZXRmUGc5WWtMZTUzWndjTHhUX0E&usp=sharing –

Trả lời

1

Tôi đã tìm thấy một vài vấn đề trong mã của bạn vì vậy tôi đã tạo một ajrHandleDuplicates_() có vẻ như bạn đang làm gì. Tôi chỉ chạy thử nghiệm đơn giản từ một thư mục duy nhất và tôi đã vô hiệu hóa trình kích hoạt tiếp tục.

Bạn có thể chạy tập lệnh từ this sheet (và lấy một bản sao, mặc dù bạn có quyền truy cập chỉnh sửa) và bạn có thể thả tệp vào this folder để kiểm tra nó (bạn sẽ thấy kết quả thử nghiệm cuối cùng). Tôi đã tạo một tệp văn bản nhỏ trên máy tính để bàn của mình và bỏ tệp đó vào và đổi tên nó.

+0

Chắc chắn tôi có thể thấy nó thực sự hoạt động ngay bây giờ nhưng chỉ có một điều, trước khi tôi chỉ có thể chia sẻ nó và nó sẽ kiểm tra các tập tin vào ổ đĩa của tôi bây giờ tôi nên để trống dấu ngoặc đơn của getFolderById vì vậy Nó cho thấy nó theo cách đó? –

+0

Nếu bạn bỏ ghi chú dòng 84 (var files = DriveApp.getFiles();) và nhận xét dòng 85 nó sẽ tìm kiếm toàn bộ GDrive của bạn. Nhưng điều này có thể sẽ vượt quá giới hạn thực thi 6 phút, do đó bạn cần phải bỏ ghi chú tất cả các mã kích hoạt khác nhau, và bạn muốn lấy một bản sao vào GDrive của riêng bạn trước vì trang tính này là công khai. –

+0

Tôi đã bật lại tất cả mã kích hoạt trong bản sao của tập lệnh. –

Các vấn đề liên quan