当前位置: 代码迷 >> JavaScript >> Google App脚本IF ELSE逻辑不正确
  详细解决方案

Google App脚本IF ELSE逻辑不正确

热度:81   发布时间:2023-06-05 14:02:29.0

我有一个Google App脚本,它将文件从一个文件夹复制到另一个文件夹。 首先,它检查源文件夹中是否有文件。 如果存在,它将删除目标文件夹中的文件,然后将文件从源文件夹复制到目标。 复制完成后,应从源文件夹中删除文件。 但是,它没有按我期望的那样工作,我认为问题在于if else语句中。 我在if else语句中有一个while循环。 我的想法是, while循环将在检查if语句之前完成,但是事实并非如此。

问题是该脚本删除了目标文件夹中的文件,而不是同时保留了这两个文件。 (我现在只有2个文件)。

这是我的代码:

while(sourceFolders.hasNext()){
    var sourceFolder = sourceFolders.next();
    var sourceFiles = sourceFolder.getFiles();

    // Check to see if there are new files to copy
    if(sourceFiles.hasNext()){
      //++ If so, delete the files in the target folder  
      deleteTheFiles(TARGET_FOLDER);

      //++ Copy new files to target folder
      while(sourceFiles.hasNext()){
        var sourceFile = sourceFiles.next();
        var sourceFileName = sourceFile.getName();
        sourceFile.makeCopy(sourceFileName, TARGET_FOLDER);
        //++ Delete files in source folder
        sourceFile.setTrashed(true);
      }
    //-- If not, do nothing
    } else {
      Logger.log('There are not files at this time.')
    }
}

因为源中有多个文件夹,所以第一个while循环重复了多次,因此触发了deleteTheFiles()函数,该函数删除了放入目标文件夹中的第一个文件。 我在while循环之外制作了一个简单的counter变量,从而解决了该问题。 这是代码:

function copyFilesToBackup() {  
  var sourceFolders = SOURCE_FOLDER.getFolders();
  var counter = 0; // <-- ADDED THIS COUNTER -->
  while(sourceFolders.hasNext()){ // <-- HERE IS THE PROBLEM
    var sourceFolder = sourceFolders.next();
    var sourceFiles = sourceFolder.getFiles();

    // Check to see if there are new files to copy
    if(sourceFiles.hasNext()){
      //++ If so, delete the files in the target folder  
      if(counter < 1){ <-- SINCE WE ONLY NEED TO DELETE THE TARGET ONCE -->
        deleteTheFiles(TARGET_FOLDER);
        counter++; <-- INCREMENT COUNTER -->
      }
      //++ Copy new files to target folder
      while(sourceFiles.hasNext()){
        var sourceFile = sourceFiles.next();
        var sourceFileName = sourceFile.getName();
        sourceFile.makeCopy(sourceFileName, TARGET_FOLDER);
        //++ Delete files in source folder
        sourceFile.setTrashed(true);
      }
    //-- If not, do nothing
    } else {
      Logger.log('There are not files at this time.')
    }
  }
}
  相关解决方案