创建一个谷歌应用脚本,从myDrive中读取文件名并将其放在基于文件名的文件夹中
问题描述:
我在创建可读取文件名的应用程序脚本时遇到困难,并且从该文件名将文件从myDrive到指定的文件夹。最终,我想创建一个应用程序,读取PR_P50_MP26_OtherContent.pdf的命名约定,并将该文件放入位于P50文件夹中的PR文件夹中的MP26文件夹中。当我运行脚本时,它会将我的文件发送到错误的文件夹。创建一个谷歌应用脚本,从myDrive中读取文件名并将其放在基于文件名的文件夹中
目标:将“PR_P50_MP286_LineLowering_2006_463.pdf”文件移动到P50文件夹下的PR文件夹中。
当我运行代码时会发生什么,它会转到else语句中的测试文件夹。
function MoveFiles(){
var files = DriveApp.getRootFolder().getFiles();
while (files.hasNext()) {
var file = files.next();
var packagedFile = file.getName();
if (packagedFile.indexOf("PR_P50"))
{
var destination = DriveApp.getFolderById("PR folder of P50 Folder");
destination.addFile(file);
var pull = DriveApp.getRootFolder();
pull.removeFile(file);
}
else{
var destination = DriveApp.getFolderById("My test Folder");
destination.addFile(file);
var pull = DriveApp.getRootFolder();
pull.removeFile(file);
}
}
}
答
没有与代码相当多的问题,但你提到的一个错误可以通过与
var packagedFile = file.getName()
答
更换
var packagedFile = file.getname()
您正在使用getFolderbyId
固定这是期待为给定ID的文件夹。尝试获取应该成为网址一部分的文件夹的ID。您还应该在while
循环之外声明您的文件夹变量。
https://drive.google.com/drive/folders/FOLDERIDHERE
这将ATLEAST能够得到文件中的正确的文件夹。如果你想按照文件夹名称来完成,你将不得不打电话getFolderByName("PR folder of p50 folder")
这将返回一个fileIterator,所以你将不得不循环,但如果你知道只有1个文件夹名称,你将能够设置文件夹为var folder = folders.next()
。无论选择哪种方式,您现在都应该能够将文件存入您想要的文件夹中。
function MoveFiles(){
var files = DriveApp.getRootFolder().getFiles();
var 1stdestination = DriveApp.getFolderById("FOLDERIDHERE");
var 2nddestination = DriveApp.getFolderById("FOLDERIDHERE");
while (files.hasNext()) {
var file = files.next();
var packagedFile = file.getName();
if (packagedFile.indexOf("PR_P50"))
{
destination.addFile(file);
var pull = DriveApp.getRootFolder();
pull.removeFile(file);
}
else{
destination.addFile(file);
var pull = DriveApp.getRootFolder();
pull.removeFile(file);
}
}
}
我做了类似这里
var JobFolder = DriveApp.getFolderById('MYFOLDERIDHERE');
//Other stuff here
if(!results.isBeforeFirst()){
throw new Error('Job does not exist');
} else {
if(jobId in JobFolder.getFilesByName(jobId))
{
var ss = SpreadsheetApp.open(jobId);
var url = ss.getUrl();
return {url:url, jobId:jobId};
} else
{
var ss = SpreadsheetApp.create(jobId);
ss.insertSheet('Job Materials');
ss.insertSheet('Job Operations');
ss.insertSheet('Job Notes');
ss.insertSheet('Employees Clocked On');
var temp = DriveApp.getFileById(ss.getId());
JobFolder.addFile(temp);
var url = ss.getUrl();
return {url:url, jobId:jobId};
}
}
感谢的东西。我能够改变这一点,它将相同的错误下移到我的if语句中。我尝试了几件事情,例如用.include替换.contains,并在随后的行中将我的文件更改为packageFile,但仍然显示代码中显示的相同类型错误。 –