Javascript 试图创建一个Google驱动器脚本来复制和移动文件
我在编码方面很糟糕,所以我相信这需要一些工作 我的问题:我的公司确实为许多其他公司工作(附示例驱动器层次结构照片)。与我们合作的每个公司都有自己的文件夹,该文件夹嵌套在“其他公司衬衫”文件夹下。我们将其所有资产放入这些文件夹(徽标、模拟、报价) 我们希望构建一个脚本,该脚本将查看各个公司文件夹,并获取以单词Javascript 试图创建一个Google驱动器脚本来复制和移动文件,javascript,google-apps-script,google-drive-api,Javascript,Google Apps Script,Google Drive Api,我在编码方面很糟糕,所以我相信这需要一些工作 我的问题:我的公司确实为许多其他公司工作(附示例驱动器层次结构照片)。与我们合作的每个公司都有自己的文件夹,该文件夹嵌套在“其他公司衬衫”文件夹下。我们将其所有资产放入这些文件夹(徽标、模拟、报价) 我们希望构建一个脚本,该脚本将查看各个公司文件夹,并获取以单词Mock开头的文件,然后自动复制该文件并将其放入下图中的数据库文件夹中 这是到目前为止的脚本。但我在进入子文件夹(ford tshirts and Design)时遇到问题。不仅如此,如果它每
Mock
开头的文件,然后自动复制该文件并将其放入下图中的数据库文件夹中
这是到目前为止的脚本。但我在进入子文件夹(ford tshirts and Design
)时遇到问题。不仅如此,如果它每天运行,脚本将继续复制它在过去复制的文件,这是我希望避免的
脚本:
函数getTheFiles(){
var-dApp=DriveApp;
var folderIter=dApp.getFolderByName(“其他公司的衬衫”);
var folder=folderIter.next();
var filesIter=folder.getFiles();
var dataBase=folder.getFoldersByName(“database1”).next();
var i=1;
while(filesIter.hasNext()){
var file=filesIter.next();
var filename=file.getName();
如果(filename=“mocking”){
makeCopy(数据库);
}
logger.log(文件名);
i++;
}
此功能将搜索整个Google驱动器中以字母Mock
开头的文件,并将名称、url、id、类型(文件夹或文件)放入活动电子表格和名为MoclList
的选项卡中
function getAllMocks() {
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName('MocksList');
sh1.clearContents();
sh1.appendRow(['Name','Url','Id','Type']);
getFnF();
SpreadsheetApp.getUi().alert('Process Complete')
}
var level=0;
function getFnF(folder) {
var folder= folder || DriveApp.getRootFolder();
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('MocksList');
var files=folder.getFiles();
while(files.hasNext()) {
var file=files.next();
if(file.getName().toLowerCase().slice(0,4)=='mock') {
var firg=sh.getRange(sh.getLastRow() + 1,level + 1);
firg.setValue(file.getName());
firg.offset(0,1).setValue(Utilities.formatString('=HYPERLINK("%s","%s")',file.getUrl(),'FILE: ' + file.getName()));
firg.offset(0,2).setValue(file.getId());
firg.offset(0,3).setValue('File');
}
}
var subfolders=folder.getFolders()
while(subfolders.hasNext()) {
var subfolder=subfolders.next();
var forg=sh.getRange(sh.getLastRow() + 1,level + 1);
forg.setValue(subfolder.getName());
forg.offset(0,1).setValue(Utilities.formatString('=HYPERLINK("%s","%s")',subfolder.getUrl(),'FOLDER: ' + subfolder.getName()));
forg.offset(0,2).setValue(subfolder.getId());
forg.offsert(0,3).setValue('Folder');
//level++;
getFnF(subfolder);
}
//level--;
}
如果我理解正确,您希望:
- 将名为“Shirts for other Companys”(以单词
开头)的文件夹中不同子文件夹中的所有文件复制到mock
数据库文件夹(也在主文件夹中)
- 避免多次复制文件
- 搜索主文件夹中以
开头的每个子文件夹中的所有文件,不包括mock
数据库文件夹中的文件。为此,您需要遍历每个子文件夹中的所有文件(检查子文件夹是否未命名为
。对于每个文件,使用以下方法检查名称是否以数据库文件夹
开头mock
- 要跟踪复制的文件,从而避免重复,可以使用,它可以存储键值对。每个复制文件的id都复制到脚本属性,然后,下次脚本运行时,它会检查id是否在属性中。如果是这样,则不会再次复制文件。需要注意的一点是该脚本属性只能存储字符串,因此每当我们要存储新id时,数组必须转换为字符串(通过,并返回到数组,通过)
函数copyFiles(){
var mainFolder=DriveApp.getFoldersByName(“其他公司的衬衫”).next();
var folders=mainFolder.getFolders();//从主文件夹获取文件夹迭代器
var databaseFolderName=“数据库文件夹”;//您需要数据库文件夹名称
var databaseFolder=mainFolder.getFoldersByName(databaseFolderName).next();//获取数据库文件夹
var idsArray=[];//用于存储复制文件的ID的数组
while(folders.hasNext()){//遍历主文件夹中的每个文件夹
var folder=folders.next();
如果(folder.getName()!==databaseFolderName){//请检查当前文件夹不是数据库文件夹
var files=folder.getFiles();
而(files.hasNext()){//遍历每个子文件夹中的每个文件
var file=files.next();
如果(file.getName().substring(0,4).toLowerCase()=“mock”){//检查文件名是否以“mock”开头
//获取以前执行中复制的文件的ID:
var key=“复制的ID”;
var scriptProperties=PropertiesService.getScriptProperties();
var id=scriptProperties.getProperty(键);
如果(ids)IDSRARY=ids.split(“,”);
else id=“”;
//获取当前文件id:
var id=file.getId();
//检查当前文件id是否不在属性中(之前未复制):
if(idsArray.indexOf(id)=-1){
file.makeCopy(databaseFolder);//将文件复制到数据库文件夹
idsArray.push(id);//将文件id添加到复制文件的数组中
}
ids=idsArray.toString();
setProperty(键,ID);
}
}
}
}
}
参考:
我希望这能有所帮助。您可能会希望使用类似于在文件夹中递归的方法。我将研究这一点,但这可能超出了我的水平。思考比编写更难。您不需要复制文件并将其移动到另一个文件夹中。访问这些文件并将其URL存储在其中,您真正需要做的就是访问它们以某种合乎逻辑的方式创建电子表格,并在您想要打开它们时单击它们。对于任何延迟,我深表歉意。不要经常登录。我真的非常感谢您的帮助!我今天将处理此问题。希望我能解决它。无论哪种方式,我都非常感谢您的帮助。