Claude Code 突然全壞?EEXIST 錯誤完整排查(Windows 專屬地雷)
看到 CLAUDE 這個錯誤的時候,我整個慌了 :
API Error: EEXIST: file already exists, mkdir '%USERPROFILE%\.claude'
直覺反應是「.claude 資料夾已經存在,所以建不起來」——但這個判斷其實跟「已存在」沒什麼關係,真正的問題是 Windows 的資料夾屬性在搗鬼。
以下是我跟 AI 對話整理以及爬了 github issue 後整理出來的完整排查流程,照著做幾行 PowerShell 就能解決,不需要重灌,也不需要刪掉 .claude。
快速修法(先試這個)
如果你想直接解決,照這組 PowerShell 做:
💡 指令裡的
$env:USERPROFILE就是你的使用者資料夾,也就是C:\Users\你的帳號名稱。複製貼上直接跑,不需要手動換掉。
Get-Item "$env:USERPROFILE\.claude" -Force
attrib -R "$env:USERPROFILE\.claude" /S /D
然後重啟 Claude Code。九成的案例到這裡就好了。
如果 Claude Code 還是噴錯,再進去執行:
/login
不需要重灌,也不需要刪掉 .claude。
為什麼錯誤訊息這麼誤導
EEXIST 的意思是「目標已存在」,聽起來很直覺,但 Windows 上的 Node.js 程式呼叫檔案系統 API 時,有時候會因為資料夾屬性或 Windows Shell 行為,收到完全不直覺的錯誤碼。
所以你看到的 EEXIST,可能根本不是「.claude 已存在」這個原因造成的。
根本原因:.claude 是資料夾,但 Mode 顯示 d-r--
這個才是最常見、也最容易誤判的情況。
Get-Item "$env:USERPROFILE\.claude" -Force
如果看到:
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 2026/05/29 PM 10:24 .claude
d 代表資料夾,r 代表 ReadOnly。
💡 Windows 資料夾上的 ReadOnly flag 很特別——它不一定等於「真的不能寫入」。很多時候這是 Windows Shell 用來標記「這個資料夾有自訂圖示或特殊檢視設定」的訊號。
但 Claude Code 在某些流程中碰到這個狀態沒處理好,最後就包成 EEXIST 丟出來。
修法:移除 ReadOnly
attrib -R "$env:USERPROFILE\.claude" /S /D
參數意思:
-R 移除 ReadOnly
/S 套用到所有子資料夾與檔案
/D 包含資料夾本身
修完再確認一次:
Get-Item "$env:USERPROFILE\.claude" -Force
理想狀態是從 d-r-- 變成 d----。
為什麼只有 Claude Code 壞,其他工具沒事
你可能也有 .codex、.gemini 這類資料夾,Mode 也是 d-r--,但它們都正常。
原因很簡單:每個 CLI 的初始化邏輯不一樣。
| 工具 | 處理方式 |
|---|---|
| Gemini CLI | 先確認資料夾存在,直接使用 |
| Codex CLI | 先確認資料夾存在,直接使用 |
| Claude Code | 某些流程直接呼叫 mkdir,遇到 ReadOnly 狀態沒處理好 |
所以這比較像 Claude Code 的 Windows 相容性問題,不是你的整個環境壞了。
desktop.ini 的狀況
如果你曾經替 .claude 資料夾設定自訂圖示,Windows 會在裡面產生 desktop.ini,並把資料夾標記成 ReadOnly。這是 Windows 的正常行為,但就是這個動作觸發了問題。
檢查是否有 desktop.ini:
Get-ChildItem "$env:USERPROFILE\.claude" -Force
如果看到 desktop.ini 且不需要自訂圖示,可以刪除:
Remove-Item "$env:USERPROFILE\.claude\desktop.ini" -Force
attrib -R "$env:USERPROFILE\.claude" /S /D
為什麼「白天正常,晚上突然壞」
這是最讓人崩潰的情境,明明中午還在用,晚上就全炸。
通常的觸發點是 OAuth token 過期,Claude Code 需要 refresh token,這個流程剛好踩到 .claude 的 ReadOnly 狀態,然後爆炸。
所以不是「晚上剛剛壞掉」,而是 token refresh 這個動作踩到了一直都在的地雷。
修法還是一樣:修完資料夾屬性後,進 Claude Code 執行 /login 重新登入。
完整排查流程
照順序做,不要一開始就刪資料夾:
Step 1. 確認 .claude 是否存在
Test-Path "$env:USERPROFILE\.claude"
- 回傳
False:重啟 Claude Code,讓它自己建立。 - 回傳
True:繼續下一步。
Step 2. 確認 ReadOnly 狀態
Get-Item "$env:USERPROFILE\.claude" -Force
- 看到
d-r--:移除 ReadOnly。
attrib -R "$env:USERPROFILE\.claude" /S /D
Step 3. 檢查 desktop.ini
Get-ChildItem "$env:USERPROFILE\.claude" -Force
有 desktop.ini 且不需要自訂圖示就刪掉,再移除 ReadOnly。
Step 4. 重新登入 Claude Code
/login
Step 5. 重啟 Claude Code
關掉目前 session 再開,測 /config 確認不再噴錯。
attrib -R 沒效怎麼辦
少數情況是 OneDrive、防毒軟體、公司 Group Policy 又把屬性改回去。
先看一下目前屬性:
Get-Item "$env:USERPROFILE\.claude" -Force | Select-Object FullName, Attributes
懷疑 OneDrive 介入,可以在 OneDrive 設定裡把 .claude 排除同步範圍。
也可以試著同時移除 ReadOnly、System、Hidden:
attrib -R -S -H "$env:USERPROFILE\.claude" /S /D
判斷速查表
| 現象 | 可能原因 | 處理方式 |
|---|---|---|
Mode 是 d-r-- | ReadOnly 屬性 | attrib -R ... /S /D |
有 desktop.ini | 曾設定自訂資料夾圖示 | 刪 desktop.ini,移除 ReadOnly |
| 白天正常,晚上突然壞 | OAuth token refresh 踩到 bug | 修屬性後 /login |
| 修完又復發 | OneDrive 或同步工具介入 | 排除同步範圍 |
不建議的處理方式
不要直接刪 .claude: 裡面可能有你精心整理的設定、自訂 commands、session 狀態。先備份改名,確認沒事再刪。
不要一開始就重灌 Claude Code: 這個錯誤多半是 .claude 的狀態問題,重灌完 .claude 還在,一樣會炸。
不要對整個使用者資料夾(C:\Users\你的帳號名稱)改權限: 影響太大,SSH、Git、OneDrive、其他 CLI 的設定都可能跑掉。
預防方式
- 不要替
.claude資料夾設定自訂圖示,這是最常見的觸發點。 - 把工具設定資料夾排除 OneDrive 同步,尤其是
.claude、.codex、.gemini。 - 備份重要設定到 Git 或 Obsidian,
.claude就算需要重建也不會掉東西。
這個問題的核心不是「你沒有權限」,也不是「.claude 已存在所以不能用」。更準確的說法是:Claude Code 在 Windows 上碰到帶 ReadOnly 或 Shell 自訂屬性的 .claude 資料夾時,某些初始化或 token refresh 流程沒有妥善處理,就把底層的 Windows 錯誤包成 EEXIST 丟出來。
幾行 PowerShell 通常就解決了,不需要重灌,也不需要大動作。
有踩到其他坑?或是修完又復發了?底下留言告訴我。
半桶水的
留言區
載入中...
發表留言