提问者:小点点

如何使用脚本重命名google drive中的多个文件?


我想使用google Script重命名我的google drive文件夹中的文件。

我想单独用我明确提到的新名字替换oldname

为了这个问题的目的,我把它变得简单明了

下面是文件夹ID-170hvrkgqyeihsrmjjflphv_js2vib5gv

里面有3个文件,分别叫1.mp4,2.mp4,3.mp4……我想把它们重命名为abc.mp4,xyz.mp4,pqr.mp4

javascript功能应该如下

在给定的文件夹id中递归搜索1.mp4,如果找到则替换为abc.mp4,否则忽略。 递归搜索给定文件夹id中的2.mp4,如果找到,替换为xyz.mp4,否则忽略。 递归搜索给定文件夹id中的3.mp4,如果找到,替换为pqr.mp4,否则忽略。

(递归搜索,因为只是为了简化和快速测试这里的答案,我保留了3个文件,但在实际使用中存在子文件夹)

正如这里有人建议使用if/else语句,我尝试了这么做。 这是我使用的脚本,现在我只是尝试将1.mp4更改为abc.mp4作为一个快速的迷你测试。 运行代码不会给我任何错误,但它根本没有改变文件名。 在脚本运行时,它甚至要求我访问驱动器,但仍然未能完成作业。

function rename() {
 console.log('Script Working');
 var SourceFolder = DriveApp.getFolderById("170hvRkGqyeIHsRMjjfLphv_Js2vIb5gV");
 console.log(SourceFolder);
 var Files = SourceFolder.getFiles();
 console.log(Files);
 for (var i in Files) {
  if (i.getName().equals("1.mp4")) {
   console.log(i);
   i.setName("abc.mp4");
   console.log(i);
  }
 }
}

rename();

我已经在脚本中添加了控制台日志来知道它到底在哪里出错,下面是控制台日志

[20-06-18 20:08:38:913 IST] Script Working
[20-06-18 20:08:38:991 IST] {}
[20-06-18 20:08:38:993 IST] {}
[20-06-18 20:08:39:004 IST] Script Working
[20-06-18 20:08:39:081 IST] {}
[20-06-18 20:08:39:085 IST] {}

我不明白为什么它无法获取源文件夹


共1个答案

匿名用户

如果您的需求如此简单,我将使用easy选项,并在for循环中运行一系列If/else语句。

if (files[i].getName().equals("1.mp4")) {
   // do the rename here
   file[i].setName("abc.mp4");
} else if (next condition) {
   // etc
}

它可能不是一个漂亮的regex语句,但我有时发现这种代码更容易阅读和维护(尤其是如果您是一个初学者,并且没有很多条件的话)<------这可能是一个非常不受欢迎的语句,但我们可以这样做。

关于递归位,首先您需要循环遍历所有文件夹。 您将使用getFolders()函数:https://developers.google.com/apps-script/reference/drive/folder#getFolders

要使它具有递归性,您需要在代码中有两个函数,并稍微重构代码。 您已经有的rename函数只需获取根文件夹,然后调用第二个函数(我们将其称为renameFolder)。

RenameFolder函数将一个文件夹作为参数。

function renameFolder(folder) {
   // your code here
}

这个函数将包含两个循环(第一个循环遍历文件,第二个循环遍历文件夹)。

在文件夹的循环中,您需要再次调用RenameFolder函数。