如何用Google Apps Script将Google Drive文件下载到本地电脑?
问题分析
你的代码核心问题是Google Apps Script(GAS)运行在Google云端服务器上,没有权限直接访问本地电脑的文件系统。你当前的代码只是把文件在Google Drive里复制了一遍再扔进回收站,完全没涉及本地存储,这就是无法下载到本地的原因。
解决方案
方案1:本地脚本+Drive API实现下载(支持开机自动运行)
要写入本地文件夹,必须用本地运行的代码结合Google Drive API,直接从Drive拉取文件保存到本地。以下是Python示例:
步骤1:准备Drive API权限
- 登录Google Cloud控制台,创建新项目并启用「Google Drive API」
- 创建服务账号,下载JSON格式的密钥文件
步骤2:本地下载脚本
import os from google.oauth2.service_account import Credentials from googleapiclient.discovery import build from googleapiclient.http import MediaIoBaseDownload import io # 配置参数 TARGET_FOLDER_NAME = "DownloadTrys" LOCAL_SAVE_PATH = "C:\\Users\\XXXX\\Desktop\\personal\\" SERVICE_KEY_PATH = "path/to/your/service-account-key.json" # 初始化Drive客户端 creds = Credentials.from_service_account_file(SERVICE_KEY_PATH, scopes=["https://www.googleapis.com/auth/drive.readonly"]) drive_service = build("drive", "v3", credentials=creds) # 查找目标文件夹ID folder_result = drive_service.files().list( q=f"name='{TARGET_FOLDER_NAME}' and mimeType='application/vnd.google-apps.folder'", fields="files(id)" ).execute() folder_id = folder_result["files"][0]["id"] # 获取文件夹内所有文件 files = drive_service.files().list( q=f"'{folder_id}' in parents", fields="files(id, name)" ).execute()["files"] # 创建本地文件夹(不存在则新建) os.makedirs(LOCAL_SAVE_PATH, exist_ok=True) # 批量下载文件 for file in files: file_id = file["id"] file_name = file["name"] local_file_path = os.path.join(LOCAL_SAVE_PATH, file_name) # 跳过已存在的文件(可选) if os.path.exists(local_file_path): continue # 执行下载 request = drive_service.files().get_media(fileId=file_id) file_handler = io.FileIO(local_file_path, "wb") downloader = MediaIoBaseDownload(file_handler, request) done = False while not done: status, done = downloader.next_chunk() print(f"{file_name}: {int(status.progress()*100)}% 完成") print("所有文件下载完成")
步骤3:设置开机自动运行
- Windows:把脚本打包成批处理文件,放到「启动」文件夹(通过
shell:startup打开),或用任务计划程序设置「登录时」触发 - macOS/Linux:用
cron或LaunchAgent配置开机启动
方案2:GAS云端生成链接+本地同步(支持休眠时云端运行,开机后本地同步)
如果想利用GAS的云端触发器(不受本地电脑状态影响),可以让GAS生成文件下载链接,再由本地脚本定时拉取链接并下载:
步骤1:GAS云端脚本(生成下载链接)
function generateDownloadLinks() { const driveApp = DriveApp; const folder = driveApp.getFoldersByName('DownloadTrys').next(); const files = folder.getFiles(); const linkList = []; while(files.hasNext()) { const file = files.next(); // 获取文件下载链接(需确保文件已设置可公开访问,或使用授权链接) const downloadUrl = file.getDownloadUrl(); linkList.push(`${file.getName()},${downloadUrl}`); } // 把链接保存到Drive的文本文件,供本地读取 const linkFile = driveApp.createFile('download_links.txt', linkList.join('\n'), 'text/plain'); folder.addFile(linkFile); }
- 设置云端触发器:在脚本编辑器中,添加「时间驱动」触发器(比如每天运行一次),无需依赖本地电脑状态。
步骤2:本地同步脚本
编写Python/PowerShell脚本,定时从Drive下载download_links.txt,遍历链接下载文件到指定文件夹,再设置本地定时任务在开机时运行。
关于「休眠时运行」的说明
- 直接在电脑休眠时下载到本地指定文件夹:不可能,休眠时电脑硬件处于低功耗状态,本地脚本无法运行,也无法写入本地存储。
- 可行替代:用GAS云端触发器在休眠时生成下载链接/同步文件到云存储,等电脑开机后,本地脚本再把文件同步到指定文件夹。
内容的提问来源于stack exchange,提问作者UtkE
相关产品推荐
相关产品推荐

