重命名Google驱动器中的文件名

时间:2020-06-03 08:50:47

标签: javascript google-apps-script google-drive-api

我在Google驱动器中有大写的文件,我想将它们全部重命名为小写

示例:

ZVXDA0002-ZPOILTY024(full).xml should be renamed as zvxda002-zpoilty024(full).xml

这是我尝试过的脚本

function FileRenaming() {
  var SourceFolder = DriveApp.getFolderById("Test_rename")
  var Files = SourceFolder.getFiles();
  while(Files.hasNext()) {
    var file = Files.next();
    var FileRename =  file.makeCopy(file.getName());
    var DestinationFolder = DriveApp.getFolderById("Test_renameD")
    DestinationFolder.addFile(FileRename);
    SourceFolder.removeFile(file);
}
}

返回

Exception: Unexpected error while getting the method or property getFolderById on object DriveApp. (line 2, file "Code")Dismiss

2 个答案:

答案 0 :(得分:2)

DriveApp.getFolderById()需要一个ID,而不是名称

  • 如果您不知道文件夹的ID,则可以改用DriveApp.getFoldersByName(name)
  • 在这种情况下,请注意,在这种情况下,您将得到一个可能包含多个具有相同名称的文件夹的数组(因为与Ids不同的名称在Google云端硬盘中不是唯一的)
  • 您需要使用DriveApp.getFoldersByName(name).next()来检索具有给定指定名称的第一个文件夹
  • 关于重命名文件夹,您只需要使用功能setName(name)
  • 您提供的脚本不会更改名称,而是将文件的副本复制到其他文件夹中

示例如何重命名文件夹:

function renameFolder(){
 var file = DriveApp.getFoldersByName(name).next();
 var oldName = file.getName();
 var newName = oldName.toLowerCase();
 file.setName(newName)
}

示例如何重命名文件夹中的文件:

function renameFiles(){
 var folder = DriveApp.getFoldersByName(name).next();
 var Files = folder.getFiles();
 while(Files.hasNext()) {
   var file = Files.next();
   var oldName = file.getName();
   var newName = oldName.toLowerCase();
   file.setName(newName)
 }
}

答案 1 :(得分:0)

如果您创建一个后续电子表格,并假定您要重命名的所有文件都在特定文件夹内,则以下代码将帮助您列出文件(在脚本中为可选,但可能很有用仔细检查脚本是否能正常工作!),然后将文件重命名为小写。您可以从电子表格内创建的菜单(My Files中运行脚本,也可以设置触发器以在特定的时间/日期自动运行该脚本:

因此,您需要:

代码

     // ---------- Menu ----------
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('My Files')
  .addItem('Rename files', 'RenameFilesToLowerCase')
  .addToUi();
}



function RenameFilesToLowerCase() {

  var folder = DriveApp.getFolderById('ID GOES HERE');  
  var sheetId = "ID GOES HERE";
  var ss = SpreadsheetApp.openById(sheetId);

  // specify the sheet to write the DATA, here it's Sheet1

  var sheet = ss.getSheetByName("Sheet1"); 
  sheet.getRange("A2:B").clear();

  var output = [];
  var file;
  var name;
  var link;
  var contents = folder.getFiles();
  while(contents.hasNext()) {
    file = contents.next();    
    data = [
      file.setName(file.getName().toLowerCase()),
      name =  file.getName(),
      link =  file.getUrl(),
    ];

    output.push([name, link]);

    // write data to the sheet  
    sheet.getRange(2, 1, output.length, output[0].length).setValues(output);  
  }  
};