【发布时间】:2018-10-08 17:22:22
【问题描述】:
我正在寻找一个循环遍历谷歌工作表并重命名谷歌驱动器上文件夹中的文件的脚本。
工作表包含文件在驱动器中的位置以及原始文件的名称和文件的新名称。
由于我是 google script 和 javascript 的完整初学者,如果有人可以帮助我,我将不胜感激。
【问题讨论】:
-
您遇到了什么具体问题?成为“一个完整的初学者”仅仅意味着您需要花时间学习——这并不意味着我们必须为您做任何事情。
我正在寻找一个循环遍历谷歌工作表并重命名谷歌驱动器上文件夹中的文件的脚本。
工作表包含文件在驱动器中的位置以及原始文件的名称和文件的新名称。
由于我是 google script 和 javascript 的完整初学者,如果有人可以帮助我,我将不胜感激。
【问题讨论】:
我没有什么可做的,所以我想我会试一试。我只测试过一次,它不与用户交互。就是这样。
function renameFiles(shname){
//var shname=shname||'bullSheet';
if(shname){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(shname);
var rg=sh.getDataRange();
var vA=rg.getValues();
var folderId=getFolderId(shname);
if(vA.length>2){
var nameA=[];
var idA=[];
var fldr=DriveApp.getFolderById(folderId);
var files=fldr.getFiles();
while(files.hasNext()){
var file=files.next();
nameA.push(file.getName());
idA.push(file.getId());
}
for(var i=2;i<vA.length;i++){
var idx=nameA.indexOf(vA[i][0]);
if(!vA[i][2] && vA[i][1] && vA[i][0] && idx>-1){
DriveApp.getFileById(idA[idx]).setName(vA[i][1]);
vA[i][2]='RENAMED';
}
}
rg.setValues(vA);
}else{
var fA=[];
var fldr=DriveApp.getFolderById(folderId);
var files=fldr.getFiles();
while(files.hasNext()){
var file=files.next();
sh.appendRow([file.getName()]);
}
}
}
}
function getFolderId(shname){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(shname);
var rg=sh.getDataRange();
var vA=rg.getValues();
return vA[0][1];
}
这是您开始时的电子表格。它在 B1 中具有文件夹 ID,在第 2 行具有三个标题,仅此而已。
然后你第一次运行 renameFiles,它会读取目录中 id 为 B2 的文件并将它们放在电子表格中。
然后在标题下的第 2 列中输入这些文件的新名称。
然后再次运行该程序,它将文件重命名为您的新名称,并将“RENAMED”放在第 3 列中,这样如果您再次运行它,程序将不会执行任何操作。
还有很多你可能希望添加类似的对话框来告诉用户发生了什么,但我将把它留给你作为练习。
如果您在一个目录中有很多文件,您可能需要在进程中添加页面标记。我选择不这样做,因为我基本上很懒。
如果您想知道从哪里获取文件夹 ID,请转到 google 驱动器中的文件夹并查看 url。这是网址中最长的部分
【讨论】:
if 测试将始终为真,因为您添加了默认值。