创建一个谷歌应用脚​​本,从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() 
+0

感谢的东西。我能够改变这一点,它将相同的错误下移到我的if语句中。我尝试了几件事情,例如用.include替换.contains,并在随后的行中将我的文件更改为packageFile,但仍然显示代码中显示的相同类型错误。 –

更换

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}; 
    } 
    }