【问题标题】:How to Compare Destination Folders names with specific Single Source folder name?如何将目标文件夹名称与特定的单一来源文件夹名称进行比较?
【发布时间】:2019-11-08 02:33:27
【问题描述】:

目前,我一直在尝试通过根据上次创建文件夹的日期比较文件夹名称,将文件或包含文件的文件夹从源 lastcreated 文件夹复制到目标文件夹。现在我想将源文件夹的最后创建日期按名称与所有目标文件夹进行比较,如果相同名称的文件夹退出而不是复制数据,否则按相同的源文件夹名称创建一个新文件夹并复制内容。

在 StackOverflow 社区的帮助下,我能够根据创建的最后日期比较文件夹并复制内容,但现在我想将源最后创建日期的文件夹名称与目标的所有文件夹进行比较。如果相同的文件夹退出而不是复制其中的数据,则它会创建一个新文件夹。附件是获取最后日期创建文件夹并与目标文件夹进行比较的代码。

var destSubFolders = destLastFolder.getFolders();   
var destSubArray=[];   
while(destSubFolders.hasNext()) {     
  var destSubfolder = destSubFolders.next(); 
  destSubArray.push({
    value: destSubfolder.getDateCreated().valueOf(), 
    sourceFolderId: destSubfolder.getId()
  }); 
}   
destSubArray.sort(function(a,b){return b.value-a.value;}); // Comparing between the date created and extracts the last created folder.    
var destLastSubFolder=DriveApp.getFolderById(destSubArray[0].sourceFolderId);// gets the last created sub folder by id.  
var destinationLastSubFolderFiles= destLastSubFolder.getFiles();//get files of the last created subfolder. 
var d_SubName = destLastSubFolder.getName(); // get name of the last created subfolder.  
if(s_SubName == d_SubName ) { //condition for comapring source and destination last created subfolder names.
  var dfnA=[]; // getting files from source sub folder and copying into destination folder.   
  while(destinationLastSubFolderFiles.hasNext()) {
    var dF=destinationLastSubFolderFiles.next();    
    dfnA.push(dF.getName());    
  }
  while(sourceLastSubFolderFiles.hasNext()) {    
    var sF=sourceLastSubFolderFiles.next();    
    if(dfnA.indexOf(sF.getName())==-1) {      
      sF.makeCopy(sF.getName(),destLastSubFolder); // copying files after comparing by names.
    }
  }
} else { //creates new folder by source subfolder name and copies data into new created folder.    
  var sNewName = lastSubFolder.getName();    
  var dFolderName=destLastFolder.createFolder(sNewName);    
  while(sourceLastSubFolderFiles.hasNext()) {       
    var sFilesIterator=sourceLastSubFolderFiles.next();    
    sFilesIterator.makeCopy(sFilesIterator.getName(),dFolderName); // copying files after comparing by names.
  }  
}

我需要将源文件夹名称与目标所有文件夹名称进行比较,如果匹配则只复制内容,否则创建一个新文件夹和内容。

【问题讨论】:

  • “我需要”不是问题...问题是什么?
  • 如果您要将内容复制到的文件夹中有匹配的文件/子文件夹名称,您想做什么?这些应该被复制吗?还是覆盖?还是根本没有复制?
  • @cooper 抱歉。我想将我的源最后创建的子文件夹名称与目标文件夹的所有子文件夹名称进行比较。如果名称匹配,那么它只会将源子文件夹中的内容复制到目标子文件夹,否则它将在目标文件夹中创建一个新的子文件夹并复制内容。
  • 这就是我应该使用哪个数组函数来比较所有文件夹名称与只有一个相同的问题?
  • 你应该添加修改你的问题。

标签: google-apps-script


【解决方案1】:

这对我有用:

function findSubFolderWithLastDate(startingFolderId) {
  var startingFolderId=startingFolderId||'defaultId';
  var startFolder=DriveApp.getFolderById(startingFolderId);
  var srcFldrs=startFolder.getFolders();
  var fldrA=[];
  while(srcFldrs.hasNext()) {
    var srcFldr=srcFldrs.next();
    fldrA.push({value:srcFldr.getLastUpdated().valueOf(),id:srcFldr.getId(),name:srcFldr.getName()})
  }
  return fldrA.sort(function(a,b){return(b.value-a.value);})[0].id;
}

function copyingFilesFromSourceToDestinationFolderWithSameName(srcfldrId,desfldrId) {
  var desFldr=DriveApp.getFolderById(desfldrId);
  var srcFldr=DriveApp.getFolderById(srcfldrId);
  var srcSubFldrs=srcFldr.getFolders();
  while(srcSubFldrs.hasNext()) {
    var srcSubFldrFound=false;
    var srcSubFldr=srcSubFldrs.next();
    var desSubFldrs=desFldr.getFolders();
    while(desSubFldrs.hasNext()) {
      var desSubFldr=desSubFldrs.next();
      if(desSubFldr.getName()==srcSubFldr.getName()) {
        srcSubFldrFound=true;
        var files=srcSubFldr.getFiles();
        while(files.hasNext()) {
          var file=files.next();
          file.makeCopy(file.getName(),desSubFldr);
        }
        break;
      } 
    }
    if(!srcSubFldrFound) {
      var newFldr=desFldr.createFolder(srcSubFldr.getName());
      var files=srcSubFldr.getFiles();
      while(files.hasNext()) {
        var file=files.next();
        file.makeCopy(file.getName(),newFldr)
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2017-05-31
    • 2023-03-20
    • 2013-07-09
    相关资源
    最近更新 更多