Google apps script DriveApp:获取具有父文件夹ID/名称和文件名的文件ID

Google apps script DriveApp:获取具有父文件夹ID/名称和文件名的文件ID,google-apps-script,Google Apps Script,我正在尝试使用DriveApp确定文件ID,使用: 父文件夹名称或父文件夹ID 有问题的文件名 我想我会用这个: 但它总是会回来: 有多个名为:(filename)的文件。但它们都不在文件夹(foldername)中 …这不是真的。有什么想法或者更简单的方法可以做到这一点吗 提前谢谢 下面是一个简单的例子: /* * ****Get File By Name*** * *param 1: File Name *param 2: Parent Folder of File (optiona

我正在尝试使用DriveApp确定文件ID,使用:

  • 父文件夹名称或父文件夹ID
  • 有问题的文件名
我想我会用这个:

但它总是会回来:

有多个名为:(filename)的文件。但它们都不在文件夹(foldername)中

…这不是真的。有什么想法或者更简单的方法可以做到这一点吗

提前谢谢

下面是一个简单的例子:

/*
* ****Get File By Name***
*
*param 1: File Name 
*param 2: Parent Folder of File (optional)
*
*returns: Dictionary of file "id" and "error" message {"id": ,"error": }
*  -if there is no error, "id" returns file id and "error" returns false
*  -if there is an error, "id" returns false and "error" returns type of error as a string for user to display or log.
*/

function getFileByName(fileName, fileInFolder){
 
  var filecount = 0;
  var dupFileArray = [];
  var folderID = "";
  
  var files = DriveApp.getFilesByName(fileName);
  
  while(files.hasNext()){
    var file = files.next();
    dupFileArray.push(file.getId());
    
    filecount++;
  };
  
  if(filecount > 1){
    if(typeof fileInFolder === 'undefined'){
        folderID = {"id":false,"error":"More than one file with name: "+fileName+". \nTry adding the file's folder name as a reference in Argument 2 of this function."}
    
    }else{
     //iterate through list of files with the same name
     for(fl = 0; fl < dupFileArray.length; fl++){
       var activeFile = DriveApp.getFileById(dupFileArray[fl]);
       var folders = activeFile.getParents();
       var folder = ""
       var foldercount = 0;
       
       //Get the folder name for each file
       while(folders.hasNext()){
         folder = folders.next().getName(); 
         foldercount++;
       };
       
       if(folder === fileInFolder && foldercount > 1){
         folderID = {"id":false,"error":"There is more than one parent folder: "+fileInFolder+" for file "+fileName}
       };
       
       if(folder === fileInFolder){
           folderID = {"id":dupFileArray[fl],"error":false};
           
       }else{
         folderID = {"id":false,"error":"There are multiple files named: "+fileName+". \nBut none of them are in folder, "+fileInFolder}
       };
     };
   };
   
  }else if(filecount === 0){
      folderID = {"id":false,"error":"No file in your drive exists with name: "+fileName};
      
  }else{ //IF there is only 1 file with fileName
    folderID = {"id":dupFileArray[0],"error":false};
    };
 
  return folderID;
};

function test() {
//My arguments for the function
var myFileName = "Invoices";
var myFileParentFolderName = "testing";
 
//Run the function
var getFileID = getFileByName(myFileName, myFileParentFolderName);
 
//Check if folder exists
if(getFileID.id === false){ //if file cannot be accurately found.
  Logger.log(getFileID.error); //alert or log error. Give option to try another FileName
}else{
  // If the file ID exists then proceed with the program. 
  Logger.log(getFileID.id);
};
}
/*
*****按名称获取文件***
*
*参数1:文件名
*参数2:文件的父文件夹(可选)
*
*返回:文件“id”和“error”消息的字典{“id”:,“error”:}
*-如果没有错误,“id”返回文件id,“error”返回false
*-如果有错误,“id”返回false,“error”返回错误类型作为字符串,供用户显示或记录。
*/
函数getFileByName(文件名,fileInFolder){
var filecount=0;
var dupFileArray=[];
var folderID=“”;
var files=DriveApp.getFilesByName(文件名);
while(files.hasNext()){
var file=files.next();
dupFileArray.push(file.getId());
filecount++;
};
如果(文件计数>1){
如果(文件信息文件夹的类型=='undefined'){
folderID={“id”:false,“error”:“多个文件名为:“+fileName+”\n尝试将文件的文件夹名添加到此函数的参数2中作为引用。”}
}否则{
//遍历具有相同名称的文件列表
对于(fl=0;fl1){
folderID={“id”:false,“error”:“有多个父文件夹:“+fileInFolder+”用于文件“+fileName}”
};
如果(文件夹===文件文件夹){
folderID={“id”:dupFileArray[fl],“error”:false};
}否则{
folderID={“id”:false,“error”:“有多个文件名为:“+fileName+”\n但它们都不在文件夹“+fileInFolder}”中
};
};
};
}else if(filecount==0){
folderID={“id”:false,“error”:“驱动器中不存在名为:“+fileName}”的文件;
}else{//如果只有一个文件名为
folderID={“id”:dupFileArray[0],“error”:false};
};
返回folderID;
};
功能测试(){
//我的函数参数
var myFileName=“发票”;
var myFileParentFolderName=“测试”;
//运行函数
var getFileID=getFileByName(myFileName,myFileParentFolderName);
//检查文件夹是否存在
if(getFileID.id==false){//if无法准确找到文件。
Logger.log(getFileID.error);//警报或日志错误。提供尝试其他文件名的选项
}否则{
//如果文件ID存在,则继续执行程序。
Logger.log(getFileID.id);
};
}

解决方案比您想象的要简单得多

  • 在下面的脚本中,将
    folderID
    fileName
    调整为您的 如果有多个ID,它会将所有ID存储在一个数组中 此文件夹中存在具有选定名称的文件
  • 如果文件只存在一个,那么您将得到一个元素数组

解决方案:
fileIDs
在ID为
folderID
的文件夹下有特定
fileName
的ID列表

请发布您尝试的代码,但它不起作用,而不是第三方链接,好吗?另外,请考虑一个最小的可复制示例。我发布了完整的代码。运行函数test()返回多个名为:Invoices的文件。但它们都不在文件夹testing中。有一个名为“testing”的文件夹,其中包含名为Invoices的文件。您的目标是什么?要获取特定文件夹下的特定文件的id吗?是的,这是目标。
function findFilesInfo() {

  const folderId = 'folderID';
  const fileName = 'fileName';
  
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFilesByName(fileName);
  const fileIDs = [];

  while (files.hasNext()) {
      var file = files.next();
      fileIDs.push(file.getId());
  }

  Logger.log(fileIDs);  
}