问题描述
我有一个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.')
}
}
1楼
dericcain
0
2015-07-30 18:17:24
因为源中有多个文件夹,所以第一个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.')
}
}
}