Drive 自動歸檔:檔案自己走到對的資料夾
你上次在 Google Drive 找一個三個月前的合約,花了幾分鐘?
「應該在那個資料夾...不對,是這個...等等我搜尋看看...啊原來叫『合約草稿2(真的最終版)』」——這個過程很多人每週都在重演。問題不是你懶,是因為上傳檔案那一刻,你在趕時間,沒空整理,「待會再說」的結果就是 Drive 變成一個 300 個檔案堆在根目錄的電子垃圾場。
這堂課解決這件事。我們要讓 n8n 接上 Google Drive,做出一條自動化流程:只要有新檔案上傳到指定資料夾,AI 就立刻讀取檔名、判斷類別、把它搬到對的子資料夾,同時改成一個你以後找得到的檔名。你以後丟進 Drive 的每一個檔案,都會自己走到它該在的位置。
這堂學什麼
- 歸檔規則設計:資料夾結構和命名格式先想清楚,AI 才能穩定執行
- Google Drive OAuth 憑證設定:新手最大關卡,五步驟完整圖解(做一次永遠有效)
- n8n Google Drive Trigger 實作:新檔案上傳即自動觸發
- 分類 Prompt 完整範本:讓 AI 輸出結構化 JSON(category + newName)
- 例外處理設計:AI 分不出來的檔案不亂動,進「待整理」資料夾
- 批次歸檔實戰:對 20 個舊檔案跑一次,清舊帳
觀念一:先把規則想好,AI 才能穩定執行
很多人想說「AI 很聰明,直接讓它決定就好」——這個思路會讓你的流程三天兩頭出問題。AI 判斷需要邊界:它必須知道你有哪些類別、命名格式長什麼樣。你沒定義清楚,它每次輸出的格式就會不一樣(有時輸出「Invoice」,有時輸出「發票」,有時輸出「財務文件」),後面的移動節點就跑不動。
先做這兩件事,再開 n8n:
第一件:設計資料夾結構。規則就兩個:類別名稱用中英對照(避免搜尋時中英混搭找不到)、每個類別名稱確定之後不要改(改了要同步改 Prompt 裡的選項清單)。

以個人工作常見情境為例,我推薦這個起手式結構,夠用又不過複雜:
📁 我的雲端硬碟
├── 📁 合約_Contracts
├── 📁 發票_Invoices
├── 📁 報告_Reports
├── 📁 會議記錄_Meetings
├── 📁 簡報_Presentations
├── 📁 照片_Photos
├── 📁 ⚠️ 待整理 ← 分不出來的全進這裡
└── 📁 📥 待歸檔 ← 這是你以後「丟進去就不管了」的入口
「待歸檔」資料夾是整條流程的入口,你以後所有新下載的東西都先丟進這裡;n8n 監聽這個資料夾,偵測到新檔案就觸發流程,搬到對應的類別資料夾。
第二件:設計命名格式。命名格式要解決兩個問題:可以排序(加日期前綴)、看名字知道內容(加關鍵字)。

格式固定這樣:YYYY-MM_類別_關鍵字_版本.副檔名
YYYY-MM:年月,讓檔案按時間自然排序類別:對應資料夾名稱(合約/發票/報告/會議)關鍵字:最重要的識別資訊,例如客戶名、專案名版本:可選,只有多個版本才加(草稿/v1/終版)
這個格式很關鍵——等一下 Prompt 裡你要明確告訴 AI「請照這個格式輸出新檔名」。
觀念二:Google 內建 Gemini vs n8n,哪個更適合你?
2026 年 6 月,Google 正式推出「整理我的檔案」(Organize My Files)功能全面上線,讓 Drive 內建的 Gemini 可以建議你把哪些檔案移到哪裡。這功能確實很方便,但它和 n8n 有根本上的差別。

最關鍵的差別是:Gemini 的「整理我的檔案」需要你手動點選「建議移動」,確認後才執行,不會全自動;而且不支援重新命名、也無法接其他服務。它適合偶爾清一次,不適合打造「上傳就自動完成」的工作流程。
如果你的 Google Workspace 有訂閱 Gemini 附加方案,兩個可以並用:平常讓 n8n 自動跑,偶爾用 Gemini 的建議功能看看它有沒有比你的規則更聰明的想法。
手把手實戰
先說清楚我們要建的流程:Google Drive Trigger(新檔案上傳) → AI 節點(判斷分類和新檔名) → IF 節點(例外分流) → Move File + Rename。以下分步驟走一遍。
建立 Google Cloud OAuth 憑證
這是新手最大的關卡,很多人卡在這裡放棄。我把五個步驟都寫清楚,做一次之後這份憑證可以用在所有 Google 服務(Drive、Gmail、Sheets),不用重做。

第 1 步:建 Google Cloud 專案
打開 console.cloud.google.com,用你的 Google 帳號登入。點頁面上方的專案下拉選單,選「新增專案」,專案名稱輸入 n8n-automation,按建立,等它建好後切換到這個專案。
第 2 步:啟用 Google Drive API
左側選單找「API 和服務」→「程式庫」,搜尋框輸入「Google Drive API」,點進去按「啟用」。這一步很多人忘了做,後面連線時就會看到 403: accessNotConfigured 錯誤。
第 3 步:設定 OAuth 同意畫面
左側「API 和服務」→「OAuth 同意畫面」:
- 使用者類型選「外部(External)」
- App 名稱填「n8n 自動化」
- 使用者支援電子郵件填你自己的信箱
- 開發人員聯絡資訊也填你的信箱
儲存完成後,找到「發布狀態」,把它從「測試中」改為「已發布」。這步非常重要:測試模式下 OAuth token 只有 7 天效期,7 天後你的流程就會開始報「Token expired」,要一直重新連線。改成已發布就是永久有效(Drive API 不屬於受限制範圍,不需要 Google 審核即可發布)。
第 4 步:建立 OAuth 用戶端 ID
「API 和服務」→「憑證」→「+ 建立憑證」→「OAuth 用戶端 ID」:
- 應用程式類型選「Web 應用程式」
- 名稱填「n8n」
- 在「已授權的重新導向 URI」那欄,先開 n8n,到 Credentials → New Credential → Google Drive OAuth2,複製它顯示的 OAuth Redirect URL,貼回 Google Cloud 這邊
- 按建立,會拿到 Client ID 和 Client Secret,兩個都複製起來
第 5 步:n8n 輸入憑證完成連線
回到 n8n,把 Client ID 和 Client Secret 貼進去,按「Sign in with Google」,跳出 Google 授權頁面,選你的帳號、按允許。回到 n8n 看到「Connected」就完成了。這份憑證存起來,之後所有 Google 相關節點都選這個。
建立 Google Drive Trigger 節點
新建一個 Workflow,第一個節點搜尋選「Google Drive Trigger」。
設定如下:
- Credential:選剛剛建好的憑證
- Trigger On:選
File Created(只在新檔案出現時觸發,更新不算) - Watch:選
Specific Folder - Folder:點選資料夾圖示,找到你的「📥 待歸檔」資料夾,選起來
儲存後點「Listen For Test Event」,然後手動往「待歸檔」資料夾丟一個測試檔案。看到 n8n 畫面出現資料(有 id、name、mimeType 等欄位),表示觸發成功。
以後流程啟用後,n8n 大約每 1 分鐘輪詢一次 Drive,偵測到新檔案就觸發(不是即時 Webhook,有 1 分鐘內的延遲,對歸檔用途完全夠用)。
加 AI 節點,寫分類 Prompt
在 Trigger 後面加一個 AI 節點(可以用「OpenAI」、「Anthropic」或「Basic LLM Chain」,本課以 Basic LLM Chain 為例,底層模型隨你選)。
System Prompt:
你是一個檔案整理助手。我會給你一個 Google Drive 的檔案名稱,你要判斷它屬於哪個類別,並且根據規則產生新的檔案名稱。
## 可用類別(只能從這裡選一個)
- 合約_Contracts
- 發票_Invoices
- 報告_Reports
- 會議記錄_Meetings
- 簡報_Presentations
- 照片_Photos
- 待整理
## 命名規則
新檔名格式:YYYY-MM_類別_關鍵字_版本.副檔名
- YYYY-MM:用今天的年月(格式 2026-07)
- 類別:填入你判斷的類別中文名稱(例如:合約、發票)
- 關鍵字:從原始檔名抽出最重要的識別資訊,最多 10 個字
- 版本:如果檔名有草稿/draft/v1/final 等字樣才加,否則省略
- 副檔名:保留原本的副檔名
## 判斷原則
- 如果從檔名完全無法判斷類別(例如 untitled、image001、無意義亂碼),category 填 "待整理",newName 填原始檔名不改
- 不要猜測,寧可進待整理也不要亂分類
## 輸出格式(只輸出 JSON,不要任何說明)
{"category": "類別資料夾名稱", "newName": "新的完整檔名含副檔名"}
User Prompt(用 n8n 的 expression 動態帶入):
請分析這個檔案名稱:{{ $json.name }}
這樣每次觸發,AI 節點就會收到實際的檔名,輸出類似這樣的 JSON:
{"category": "發票_Invoices", "newName": "2026-07_發票_設計費_12500元.pdf"}
**解析 JSON 輸出:**在 AI 節點後加一個「Code」節點(語言選 JavaScript),把 AI 輸出的字串解成物件:
const aiText = $input.first().json.text;
// 有時 AI 會多輸出 markdown code fence,先清掉
const cleaned = aiText.replace(/```json\n?|\n?```/g, '').trim();
const parsed = JSON.parse(cleaned);
return [{ json: { ...parsed, fileId: $input.first().json.id, originalName: $input.first().json.name } }];
這個 Code 節點輸出三個欄位:category、newName、fileId(後面 Move 節點需要)。
IF 節點:例外分流
Code 節點後加一個「IF」節點,設定條件:
- Value 1:
{{ $json.category }} - Operation:
Equal - Value 2:
待整理
True 分支(category = 待整理):加「Google Drive」節點,Operation 選「Move File」:
- File:選
By ID,值填{{ $json.fileId }} - Destination Folder:選你的「⚠️ 待整理」資料夾
不改名,就讓它原名進待整理,你之後看到的時候才知道是哪個檔案。
False 分支(可以分類):繼續往下走到下一步。
移動檔案 + 重新命名
IF 節點的 False 分支,加兩個 Google Drive 節點:
節點 A:移動到正確資料夾
Google Drive 節點,Operation 選「Move File」:
- File:選 By ID →
{{ $json.fileId }} - Destination Parent Drive:選 My Drive
- Destination Folder:這裡要用 expression,不能直接選資料夾——因為 category 是動態的
解法:先建一個「Google Drive」節點,Operation 選「List Files」,搜尋名稱為 {{ $json.category }} 的資料夾,取得它的 folder ID;再把這個 folder ID 填到 Move File 的 Destination Folder。
或者更簡單的做法:在 Code 節點裡建一個 category → folder ID 的 mapping 物件(各資料夾的 ID 從 Drive URL 複製):
const folderMap = {
"合約_Contracts": "YOUR_FOLDER_ID_1",
"發票_Invoices": "YOUR_FOLDER_ID_2",
"報告_Reports": "YOUR_FOLDER_ID_3",
"會議記錄_Meetings": "YOUR_FOLDER_ID_4",
"簡報_Presentations": "YOUR_FOLDER_ID_5",
"照片_Photos": "YOUR_FOLDER_ID_6",
};
const parsed = JSON.parse(/* ... */);
const destinationFolderId = folderMap[parsed.category] || "YOUR_PENDING_FOLDER_ID";
return [{ json: { ...parsed, fileId: ..., destinationFolderId } }];
怎麼找 Folder ID? 在 Drive 點開那個資料夾,看網址列:
https://drive.google.com/drive/folders/這一段就是ID
節點 B:重新命名
Google Drive 節點,Operation 選「Update File」:
- File:By ID →
{{ $json.fileId }} - Name:expression →
{{ $json.newName }}
這樣就完成了:檔案移到對的資料夾,同時改成新檔名。
批次歸檔實戰:對 20 個舊檔案跑一次
新流程接好之後,你的舊檔案不會自動被觸發(因為它們不是「新上傳」)。要清舊帳,建一個獨立的「批次歸檔流程」跑一次就好。

流程架構:
- Manual Trigger:手動執行(只跑一次)
- Google Drive - List Files:列出「待歸檔」資料夾裡的所有檔案。設定 Query Filter 可以過濾掉資料夾:
mimeType != 'application/vnd.google-apps.folder' - Split In Batches:把清單拆成每次 1 筆(Batch Size 設 1),讓後面的 AI 節點逐筆處理,避免超過 API 速率限制
- 接後面一樣的流程:AI 節點 → Code 解析 → IF 例外分流 → Move + Rename
設定好後按「Test Workflow」手動執行一次,看 Execution 頁面每筆的處理結果。預期大約 20 個檔案跑 90 秒左右,分類率通常在 80~90%(有正常檔名的幾乎都分得出來)。
執行完去 Drive 確認一次:類別資料夾裡的檔案有沒有命名格式正確、有沒有跑錯資料夾。如果某個類別一直被分錯,回頭調整 Prompt 裡那個類別的說明文字就好,不用改節點設定。
n8n 工作流程架構總覽

整條流程就這樣,每個節點職責分明:Trigger 負責偵測、AI 負責判斷、IF 負責分流、Move + Rename 負責執行。之後如果要加新類別,只要兩件事:在 Drive 建新資料夾、在 Code 節點的 folderMap 加一行、在 Prompt 的類別清單加一項。擴展起來非常直觀。
常見坑
坑 1:OAuth token 每 7 天自動失效,流程突然停止執行
症狀:流程之前跑得好好的,突然某天開始所有 Google Drive 節點都報 Error: The caller does not have permission 或 Error: Token has been expired or revoked。
原因:OAuth 同意畫面的發布狀態停留在「測試中(Testing)」。測試模式下,外部使用者的 refresh token 有 7 天限制,到期就被 Google 撤銷。
解法:回到 Google Cloud Console → API 和服務 → OAuth 同意畫面,把「發布狀態」改為「已發布」,然後在 n8n 的 Credentials 重新按一次「Sign in with Google」重新授權。Drive API 不屬於敏感範圍,改為已發布不需要 Google 審核。
坑 2:Redirect URI mismatch 錯誤,連線頁面一直跳錯
症狀:按「Sign in with Google」後跳出 Error 400: redirect_uri_mismatch。
原因:你在 Google Cloud Console 填的 Redirect URI 和 n8n 那邊實際的 Redirect URL 不一樣。很常見的錯誤是:n8n 的 URL 是 https://app.n8n.cloud/rest/oauth2-credential/callback,但你填的少了路徑、多了斜線、或 http 和 https 不一樣。
解法:在 n8n 的 Credential 設定頁,完整複製它顯示的 OAuth Redirect URL(連最後的 /callback 都要),回 Google Cloud Console 的「已授權的重新導向 URI」把舊的刪掉,貼上正確的,存檔後等 1~2 分鐘再試(Google 的設定更新有點延遲)。
坑 3:AI 輸出格式不穩定,Code 節點 JSON.parse 報錯
症狀:Code 節點拋出 SyntaxError: Unexpected token。
原因:某些 AI 模型有時不乖,輸出的不是純 JSON,而是包在 markdown code fence 裡(```json ... ```),或者在 JSON 前面多加了一句「以下是我的分析:」之類的說明。
解法一:Prompt 加強指示,在 System Prompt 最後加:「非常重要:只輸出 JSON 物件,第一個字是 {,最後一個字是 },不要任何前綴或後綴,不要 markdown 格式。」
解法二:Code 節點加防禦性解析:
let text = $input.first().json.text || '';
// 清除 code fence
text = text.replace(/```(?:json)?\n?/g, '').replace(/\n?```/g, '').trim();
// 只截取第一個 { 到最後一個 }
const start = text.indexOf('{');
const end = text.lastIndexOf('}');
if (start === -1 || end === -1) throw new Error('AI 輸出沒有找到 JSON: ' + text);
const parsed = JSON.parse(text.slice(start, end + 1));
return [{ json: parsed }];
坑 4:Move File 成功,但 Update File(重新命名)報 File not found
症狀:Move 執行沒問題,下一個 Rename 節點卻報找不到檔案。
原因:移動和重新命名是兩個 API 呼叫,Move 完成後 Google Drive 的 API 有時有短暫延遲(特別是跨 Drive 或大檔案)。
解法:在 Move 和 Rename 節點之間加一個「Wait」節點,等 2 秒(對自動化流程來說完全不影響實用性)。或者把「移動」和「重新命名」合併到 Update File 節點裡一次完成:Update File 節點可以同時設定新的 parent folder 和新的 name,一個 API 呼叫解決。
作業
- 建好你自己的資料夾結構(至少 4 個類別),在 Drive 把各資料夾建起來,記下每個資料夾的 ID。
- 完整走一遍實戰流程,讓一個測試檔案觸發整條 Workflow 並成功歸位。
- 對你 Drive 裡的舊檔案跑一次批次歸檔。建議先選 10~20 個確定類別清楚的測試,確認分類率滿意後再全面跑。
- 進階選做:在 Prompt 加入判斷「如果副檔名是 .jpg/.png/.heic 且檔名含有日期數字」就歸入「照片_Photos」並以拍攝日期命名——把照片也一起整理掉。
下一課預告
Drive 整理完了,接下來最讓人崩潰的是信箱:每天早上打開 Gmail,一堆 newsletter、廣告信、通知信把真正重要的信淹沒了,光是掃一遍就花了 20 分鐘。第 3 課教你用 n8n 接 Gmail,讓 AI 每天早上幫你讀完所有信、過濾掉雜訊,只把需要你處理的事情打包成一封「今日摘要」寄給你——你每天只需要讀這一封。