工程師思路系列・事出必有因
⚠ 閱讀本文前,請先看這一段
⚠

這是經驗分享,不是標準作業程序(SOP)。我的實測只有一台電腦,你的 Windows 版本、軟體與使用習慣都可能不同。
⚠

先看第一部分就好。多數人做完第一部分,空間問題就解決了。看到成效,請先停手。
⚠

第二、三部分是給有基礎的人。初學者請不要無腦照做;看不懂風險說明的指令,不要執行。
⚠

所有指令都已收合。請先看每一項的「風險與影響」,再決定要不要展開。
⚠

不要把網路上或 AI 助理給的指令整串貼進系統管理員視窗。每一條指令,請先弄懂它會改什麼。
⚠

動手前先備份重要資料;公司或客戶的電腦,請先取得同意再操作。
⚠

文中 ✅ 已實測 代表我在自己的電腦實際做過;📖 理論建議 代表依官方文件或一般實務整理,我尚未實測。

我的 C 槽總空間 223GB,可用空間只剩約 20GB,磁碟用量的長條圖已經變成警示的紅色。看到紅色,人就會想動手。

我先照標準程序,用 Windows 的暫存檔案清理做了一輪,但還是不滿意。於是用 WizTree 掃描整個 C 槽:約 112 萬個項目(約 86 萬個檔案加 26 萬個資料夾),匯出一份約 170MB 的檔案與目錄清單(CSV),交給 AI 分析工具去找大戶。最先抓到的是 C:\Windows\Temp,佔了約 6GB。

我就請 AI 助理給了一組「強力刪除指令」:對 Temp 強制奪取擁有權,再把裡面清空。確實見效,釋放了約 5.9GB。但我心裡一直擔心有後遺症,事後檢查權限才發現:原廠給「一般使用者」的寫入規則不見了、多出一條原廠沒有的帳號規則、資料夾的擁有者也變成了我的個人帳號。

C 槽總空間
223GB
 
起始可用空間
約 20GB
用量條呈紅色警示
目前可用空間
65GB
已用約 91% → 約 71%
多出來的空間
約 45GB
多個步驟累計

請注意:這些數字只是我這台電腦的結果,不是承諾。各個步驟分別回收了多少,我沒有逐項紀錄,所以這篇文章給的回收量只有「常見範圍」,請以你自己的掃描結果為準。

系統沒有立刻壞掉。這類問題的特性就是這樣:不會立刻出事,等哪天某個程式或某位使用者寫不進暫存資料夾,你才會花很多時間找原因。

空間是釋放了,但我改了不該改的東西。這件事讓我重新整理了一份清理指南,這篇是它的部落格版:先給你簡單、安全、立竿見影的做法;複雜、有風險、容易出錯的,我把它們收起來,並告訴你為什麼不建議無腦照做。

為什麼現在更要「且用且珍惜」手邊的 SSD

我的系統碟是 240GB 等級(可用約 223GB)。如果是一年前,這根本不是問題:SSD 當時價格低,順手換一顆 500GB 就解決了。

但這一年行情完全變了。AI 資料中心大量搶購記憶體與快閃記憶體,製造商把產能優先配給利潤更高的伺服器與資料中心產品,記憶體與 SSD 的價格因此大幅上漲;有報導指出,某些規格 SSD 的合約價一年內漲了三倍以上。市調機構 TrendForce 在 9 月底預估,2026 年第四季 NAND Flash 合約價仍會再漲約 15% 到 20%。業界也有人預期這波吃緊會延續到 2027 年甚至更久,不過這只是預測,不是定論。

零售端也看得到。這是價格追蹤網站 BigGo 記錄的一款 512GB 2.5 吋 SSD(Patriot P220,Yahoo 購物中心)的走勢:兩年內的最低價是 NT$687(2024/12/04 05:00),之後 2025 年大部分時間約在 NT$700~1,000(依圖形估讀);2025 年底開始往上跳,今年 6 月之後多半落在 NT$2,500~2,730;最近回落到 NT$2,211。也就是說,一年前順手就能買的 500GB 等級 SSD,現在的價格是當時的兩倍以上。科技新報引述 PC Part Picker 的趨勢,也提到 NVMe SSD 自 2025 年 12 月起開始上漲。

日期 價格(新臺幣) 與前一筆的變化
2026/06/12 2,512 ↓ 218
2026/07/01 2,730 ↑ 218
2026/09/01 2,539 ↑ 27
2026/10/29 2,730 ↑ 191
2026/11/03 2,258 ↓ 472
2026/11/12 2,211 ↓ 47

資料截至 2026/11/12。BigGo 顯示該商品最近兩年的最高價 2,730(2026/07/01 與 10/29 兩次)、最低價 687(2024/12/04)。這只是單一商品、單一通路的紀錄,價格會依通路與時間變動,僅作為趨勢參考,不是購買建議。

所以我的選擇是:不急著花錢換碟,先把手邊這顆用好、用久。這不代表永遠不要升級,如果你的使用量本來就超過容量,換更大的碟仍然是正解;只是在行情不友善的時候,先搞清楚「空間到底被誰佔走了」,常常能多撐一段時間。價格會變動,請以你當下的市場行情為準。

第一部分:先做這三件事(簡單・安全・立竿見影)

請照順序做,每做完一步就看一次剩餘空間。夠用了,就停手。

1

先看清楚「誰」佔了空間

用 WizTree 或 TreeSize 掃描 C 槽,請以系統管理員身分執行,才能讀到完整的檔案清單。不要靠猜:先知道大頭在哪,才不會去動不該動的地方。我的 C 槽有約 112 萬個項目,光靠眼睛看不完,我是匯出 CSV 請 AI 工具協助分析。另外要記得:掃描只是那個時間點的快照,清理之後才掃,看到的是清理後的樣子,不能拿來推論清理前的情況。

常見的大戶有:hiberfil.sys(休眠檔)、Windows.old(舊系統備份)、Docker 或 WSL2 的虛擬硬碟檔,以及使用者的暫存資料夾。

下面是我的 C 槽在 WizTree 裡排出來的前幾名:

項目(掃描當下) 大小 能不能動
C:\Users(使用者資料與應用程式資料) 73.6 GB 要逐項檢視;大多是你自己的資料與應用程式快取
Program Files 與 Program Files (x86) 47.9 GB 已安裝的軟體,用「解除安裝」處理,不要手動刪
C:\Windows 21.5 GB 其中 Installer 約 5.5GB、WinSxS 約 5.4GB 是禁區(見第四部分)
hiberfil.sys(休眠檔) 12.8 GB 第一部分第 3 步
docker_data.vhdx(Docker 虛擬硬碟) 9.0 GB 第三部分,要先備份
pagefile.sys(分頁檔) 3.9 GB 虛擬記憶體,不建議動
Chrome 裝置端 AI 模型 約 4.0 GB 見 2-4,視版本而定

這份掃描是 11 月 13 日 23:18 做的,當時 C 槽可用約 48.6GB,是整個過程的中途快照:不是清理前,也不是最後結果。

回頭看這份清單,我當初最先盯上的 Temp 約 6GB,大小排在休眠檔(12.8GB)與 Docker 虛擬硬碟(9.0GB)之後,卻是風險最高的那一塊;比它更大、更安全的選擇,就在同一份清單裡。診斷的價值就在這裡:先看全貌,再挑風險最低的下手。

難度:初級資料風險:低(只是檢視)✅ 已實測
2

用 Windows 內建的「儲存空間」清理

到 設定 → 系統 → 儲存空間 → 暫存檔案,可以勾選:

✔

以前的 Windows 安裝(Windows.old):大版本更新後留下的舊系統備份,常佔 20GB ~ 40GB。系統通常預設保留約 10 天(實際依版本與設定而異),確認新系統運作正常再清。
✔

傳遞最佳化檔案:Windows Update 的點對點分享快取,有時有數 GB。
✔

其他暫存檔案、縮圖快取,依需要勾選。

喜歡舊介面的,也可以用「磁碟清理(cleanmgr)」,裡面有「Windows Update 清理」。不是每一項都適用每台電腦:我的 C 槽掃描時並沒有 Windows.old,所以這一項我沒有回收到空間。

難度:初級資料風險:低可逆性:不可逆(刪掉 Windows.old 就無法退回舊版 Windows)📖 理論建議
3

關閉休眠檔

hiberfil.sys 是休眠與「快速啟動」用的記憶體映像,大小約為實體記憶體的 40% ~ 100%,常見 8GB ~ 20GB 以上,以你電腦上的實際大小為準。在我的 C 槽,它是 12.8GB,是整個 C 槽最大的單一檔案。如果你平常只用「睡眠」和「關機」,根本用不到休眠,關掉就能立刻拿回空間。

•

副作用 1:會一併停用「快速啟動」。機械硬碟或較舊的電腦,冷開機可能多花幾秒;NVMe SSD 通常差異很小。
•

副作用 2:筆電若設定「電量過低時自動休眠」,關閉後這個保護會失效。
•

想恢復,一行指令就能回來。
難度:初級資料風險:低可逆性:可恢復✅ 已實測
▶ 展開指令:關閉與恢復休眠(風險:低)

以系統管理員身分開啟「命令提示字元」,執行:

powercfg -h off

之後想恢復休眠與快速啟動:

powercfg -h on
🛑 到這裡,請先停手

做完這三步,先看一次 C 槽剩餘空間。如果已經夠用,就不要再往下做了。

清理的目標是解決眼前的空間問題,不是把所有能刪的都刪光。為了多拿幾 GB,去承擔不成比例的系統風險,不划算。

第二部分:還不夠再做(中等難度,看懂再動手)

第一部分做完空間仍然吃緊,才考慮這一區。這裡的風險大多不高,但需要用命令列,而且「刪了就回不來」的比例變高。每一項的指令都收合了,請先看風險說明。

2-1 Windows Update 下載殘留

更新裝完後,安裝包常殘留在 C:\Windows\SoftwareDistribution\Download。只能在更新閒置時清:如果 Windows Update 正在下載、安裝,或在等你重新啟動,請不要動。一般使用者建議直接用上面提到的「磁碟清理」處理,命令列版本留給工程師。

難度:中級資料風險:低可逆性:可恢復(Windows 會重新下載)✅ 清空快取已實測;📖 服務狀態保存寫法尚未實測
▶ 展開指令:清空更新下載快取(風險:低,需更新閒置)

以系統管理員身分開啟 PowerShell。這個寫法會先記下 Windows Update 服務原本的狀態,只在原本執行中才停止與恢復;刪除失敗的數量與服務恢復的結果會分開顯示:

$wasRunning = ((Get-Service wuauserv).Status -eq 'Running')
$delErr = $null
try {
    if ($wasRunning) { Stop-Service wuauserv -Force -ErrorAction Stop }
    Remove-Item "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force `
        -ErrorAction SilentlyContinue -ErrorVariable delErr
}
finally {
    if ($wasRunning) {
        try   { Start-Service wuauserv -ErrorAction Stop }
        catch { Write-Warning ("wuauserv 恢復失敗:" + $_.Exception.Message) }
    }
    $failed = if ($delErr) { @($delErr).Count } else { 0 }
    Write-Host ("刪除失敗項目:{0} 個" -f $failed)
    Write-Host ("wuauserv 目前狀態:{0}(執行前:{1})" -f (Get-Service wuauserv).Status, $(if ($wasRunning) { '執行中' } else { '未執行' }))
}

2-2 WinSxS 元件庫:先評估,再決定要不要清

C:\Windows\WinSxS 是 Windows 的元件存放區,絕對不要手動刪裡面的檔案(見第四部分)。要精簡,只能用微軟提供的 DISM 工具。另外要注意:檔案總管或 WizTree 看到的 WinSxS 容量,因為包含與其他系統資料夾共用的硬連結,實際可回收的通常遠小於顯示值。所以請先用「分析」指令,讓系統告訴你值不值得清。

難度:中級資料風險:低可逆性:部分不可逆(被清掉的舊元件無法復原)📖 分析未實測;✅ 標準清理已實測
▶ 展開指令:評估與標準清理(風險:低)

以系統管理員身分開啟「命令提示字元」。先評估,看輸出是否建議清理:

dism /online /cleanup-image /analyzecomponentstore

系統建議清理、而且你仍需要空間,再執行標準清理(通常可回收 1GB ~ 3GB,以分析結果為準):

dism /online /cleanup-image /startcomponentcleanup

2-3 暫存資料夾(Temp)的日常清理

暫存檔刪不掉,多數情況是檔案正被程式使用(鎖定),不是權限問題。所以正確做法是「刪得掉的刪,鎖住的跳過」,而不是去改權限。下面這份 PowerShell 腳本不改任何權限,預設是「預覽模式」:只告訴你有多少候選檔案,不會真的刪除。確認數字合理,再改成實際執行。

✔

先刪「超過 1 天」的檔案,再由深到淺清理確實為空的舊資料夾,不會誤刪非空資料夾。
✔

不跟進連結點(junction / symlink),避免刪到暫存資料夾以外的地方。
✔

「候選」「已刪除」「刪除失敗」「無法列舉」分開統計;「無法列舉」大於 0,代表掃描不完整。
✔

只清理目標「內部」,不會刪掉 Temp 或你的使用者 Temp 資料夾本身。
難度:中級資料風險:低可逆性:不可逆(不經資源回收筒)📖 邏輯已在 Linux 模擬測試,尚未在 Windows 實測
▶ 展開指令:Temp 預覽與清理腳本(風險:低,請先用預覽模式)

以系統管理員身分開啟 PowerShell。第一行的 $preview = $true 是預覽模式;確認無誤後才改成 $false:

# ── 設定 ──────────────────────────────────────────────
$preview = $true     # $true = 只預覽不刪除;確認無誤後改成 $false 才會實際刪除
$cutoff  = (Get-Date).AddDays(-1)
$targets = @("C:\Windows\Temp", $env:TEMP) | Select-Object -Unique
# ─────────────────────────────────────────────────────

$candidateCount = 0; $candidateBytes = 0      # 符合條件的「候選」檔案(預覽與實際執行都會統計)
$deletedCount   = 0; $deletedBytes   = 0      # 實際刪除成功(僅實際執行)
$failedFiles    = 0                           # 檔案刪除失敗(鎖定/權限)
$enumErrors     = 0                           # 無法列舉內容的資料夾(掃描不完整)
$reparseSkipped = 0                           # 略過的連結點(junction / symlink),不跟進
$dirsRemoved    = 0; $dirsKept = 0            # 空資料夾清理結果

foreach ($root in $targets) {
    Write-Host "處理:$root"
    $dirs  = New-Object System.Collections.Generic.List[object]
    $stack = New-Object System.Collections.Generic.Stack[string]
    $stack.Push($root)

    while ($stack.Count -gt 0) {
        $dir = $stack.Pop()
        try   { $items = Get-ChildItem -LiteralPath $dir -Force -ErrorAction Stop }
        catch { $enumErrors++; continue }                       # 無法列舉:單獨統計,不當作「空資料夾」

        foreach ($i in $items) {
            if ($i.Attributes -band [IO.FileAttributes]::ReparsePoint) { $reparseSkipped++; continue }
            if ($i.PSIsContainer) {
                # 刪檔前先記下「資料夾是否已超過期限」(刪檔後資料夾的修改時間會變成現在)
                $dirs.Add([pscustomobject]@{ Path = $i.FullName; Old = ($i.LastWriteTime -lt $cutoff) })
                $stack.Push($i.FullName)
                continue
            }
            if ($i.LastWriteTime -ge $cutoff) { continue }
            $candidateCount++; $candidateBytes += $i.Length
            if ($preview) { continue }
            try   { Remove-Item -LiteralPath $i.FullName -Force -ErrorAction Stop
                    $deletedCount++; $deletedBytes += $i.Length }
            catch { $failedFiles++ }
        }
    }

    if (-not $preview) {
        # 由最深層往上,只處理「已超過期限」的資料夾。
        # [IO.Directory]::Delete($path, $false) 只會刪除空資料夾,非空會丟出例外,不會誤刪內容。
        foreach ($d in ($dirs | Where-Object { $_.Old } | Sort-Object { $_.Path.Length } -Descending)) {
            try   { [IO.Directory]::Delete($d.Path, $false); $dirsRemoved++ }
            catch { $dirsKept++ }
        }
    }
}

$mode = if ($preview) { "預覽(未刪除任何項目)" } else { "實際執行" }
Write-Host ""
Write-Host "模式:$mode"
Write-Host ("候選檔案(超過 1 天):{0} 個,約 {1:N1} MB" -f $candidateCount, ($candidateBytes / 1MB))
if (-not $preview) {
    Write-Host ("已刪除檔案:{0} 個,約 {1:N1} MB" -f $deletedCount, ($deletedBytes / 1MB))
    Write-Host ("刪除失敗(鎖定/權限):{0} 個" -f $failedFiles)
    Write-Host ("空資料夾:已移除 {0} 個,保留 {1} 個" -f $dirsRemoved, $dirsKept)
}
Write-Host ("無法列舉的資料夾:{0} 個" -f $enumErrors)
Write-Host ("略過的連結點:{0} 個" -f $reparseSkipped)
if ($enumErrors -gt 0) { Write-Host "※ 有資料夾無法列舉,掃描結果不完整,上方數字僅供參考。" }

2-4 Chrome 的裝置端 AI 模型快取(視版本與環境而定)

部分 Chrome 版本會在本機下載裝置端 AI 模型,累積數 GB。我的 C 槽掃描看到 weights.bin 約 2.7GB、cache.bin 約 1.3GB,合計約 4GB(我還沒有動它)。但這不是每台電腦都有,請先用 WizTree 確認你的電腦上這個資料夾是否真的佔用大量空間,再決定要不要處理。刪除前請完全關閉 Chrome;刪除只是釋放目前的空間,Chrome 之後可能再下載。至於用 Chrome 的實驗性設定去停用,名稱與效果會隨版本改變,不能當成穩定的做法。

難度:初級資料風險:低可逆性:可恢復📖 理論建議(我自己沒有實際執行)
▶ 展開路徑:模型快取所在位置

請把 <使用者名稱> 換成你的帳號,只刪除裡面的模型版本資料夾:

C:\Users\<使用者名稱>\AppData\Local\Google\Chrome\User Data\OptGuideOnDeviceModel\

第三部分:進階與高風險(初學者請跳過,不要無腦照做)

這一區的失誤,代價是資料遺失、無法復原,甚至需要重裝

這些做法真的有效,所以我把它們寫出來;但我更希望你知道為什麼不建議。如果你對下面任何一項的風險說明感到陌生,請直接跳到第四部分。

3-1 Docker 清理與 WSL2 虛擬磁碟壓縮

Docker 與 WSL2 的虛擬硬碟檔(docker_data.vhdx 或 ext4.vhdx)有個特性:在裡面刪資料,Windows 端的檔案大小不會自動縮小。所以要分兩步:先在 Docker 內清,再壓縮虛擬硬碟檔。

•

清理指令的風險:Docker 的「全面清理」(system prune 搭配 -a 選項)會清掉所有已停止的容器、所有未使用的映像、網路與建置快取;若再加上磁碟區(volumes)選項,還可能涉及未使用的磁碟區。如果資料寫在容器本身的可寫入層,容器一刪,資料就沒了。「資料庫容器停止了」不等於「資料已經妥善保存」。
•

壓縮指令的限制:diskpart 不支援 %USERNAME% 這類環境變數,路徑要先用 WizTree 找出實際絕對路徑;而且 Docker Desktop 與 WSL 都要先完全關閉。
•

不要直接刪除虛擬硬碟檔當作「重建」方法。它是 Docker Desktop 管理的資料儲存設施,確定整個 Docker 不需要,請改用 Docker Desktop 內建的 Troubleshoot 裡的 Clean / Purge data,並先備份。
•

壓縮後如果檔案大小幾乎沒變,可在 WSL 發行版內先試 fstrim(📖 並非所有環境都能執行,不行就略過)。
難度:進階資料風險:高(清理)/低(壓縮)可逆性:清理不可逆/壓縮可恢復✅ 清理與壓縮已實測;fstrim 📖
▶ 展開指令 1:先檢查,再清理 Docker(風險:高,請先備份)

先確認有沒有需要保留的已停止容器或資料卷:

docker ps -a
docker volume ls

確認無誤後,由風險低到高逐項執行(不要一開始就加上磁碟區選項):

docker builder prune
docker image prune
docker system prune -a
▶ 展開指令 2:壓縮 WSL2 / Docker 虛擬硬碟(風險:低,但操作要精準)

先完全結束 Docker Desktop,再以系統管理員身分執行:

wsl --shutdown
diskpart

在 DISKPART 內依序輸入(路徑請換成你在 WizTree 查到的實際位置):

select vdisk file="C:\Users\<使用者名稱>\AppData\Local\Docker\wsl\disk\docker_data.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

3-2 WinSxS 深度壓縮(resetbase)

這是 DISM 的進階選項,不可逆:執行後,目前已安裝的 Windows Update 就無法解除安裝。它不是一般清理工具,是一個系統維護的決策。執行前請確認全部符合:

✔

Windows Update 沒有待完成的安裝、待重新啟動或元件維護工作。
✔

系統目前運作正常,而且重要資料已有備份。
✔

你接受之後無法解除安裝現有的更新。
✔

第二部分的標準清理做完了,空間仍然不夠。
難度:進階資料風險:中高可逆性:不可逆✅ 已實測
▶ 展開指令:resetbase(風險:不可逆,約需 10 ~ 30 分鐘)

以系統管理員身分執行,請耐心等待:

dism /online /cleanup-image /startcomponentcleanup /resetbase

3-3 清除系統還原點

還原點是系統出問題時的回復安全網。清掉它可以換回空間,但也等於拿掉了後悔藥。若你有第三方備份軟體在使用 VSS,更要先確認不會影響它。下面的指令一次只刪最舊的一個,不建議用「全部刪除」的選項。

難度:進階資料風險:中(失去回復選項)可逆性:不可逆📖 理論建議
▶ 展開指令:查詢與刪除最舊的還原點(風險:中)

先看佔用情況與現有還原點:

vssadmin list shadowstorage
vssadmin list shadows /for=C:

每執行一次只刪一個最舊的,要多刪請重複執行並每次確認空間:

vssadmin delete shadows /for=C: /oldest

3-4 Robocopy 鏡像清空(超長路徑的最後手段)

當某個孤兒資料夾因為路徑太深(超過 260 字元)導致一般刪除失敗,可以用 Robocopy 把一個「空資料夾」鏡像覆蓋過去,達到清空的效果。但這是破壞性操作:路徑一旦打錯,就直接清空,不經資源回收筒。它的危險不在於指令複雜,而是來源與目的地一旦搞反或打錯,結果完全不是你要的。

•

絕不能指向磁碟根目錄、C:\Users 或 C:\Windows 這類資料夾。
•

一定先用「預覽」模式;預覽前先確認來源是空的、目的地用絕對路徑(不要用環境變數)、沒有對調、沒有錯字。
•

一定加上重試限制,否則遇到鎖定檔案會等非常久。
•

結束代碼 0 ~ 7 只代表「沒有被判定為失敗」,不能單憑代碼確認目標已清空;8 以上才是失敗。最後一定要親自檢查目標是否清空。
難度:進階資料風險:高可逆性:不可逆✅ 基本用法已實測;預覽與代碼檢查 📖
▶ 展開指令:Robocopy 預覽、執行與確認(風險:高)

建立空的來源資料夾,並確認它真的是空的:

mkdir C:\EmptyTempFolder
dir /a C:\EmptyTempFolder

先預覽(/L 只列出將被刪除的項目,不會動作)。目的地請換成你要清的絕對路徑:

robocopy C:\EmptyTempFolder "C:\欲刪除的頑固資料夾絕對路徑" /purge /L /R:1 /W:1

確認列出的項目都是你要刪的,才拿掉 /L 實際執行,並立刻查結束代碼:

robocopy C:\EmptyTempFolder "C:\欲刪除的頑固資料夾絕對路徑" /purge /R:1 /W:1
echo %ERRORLEVEL%

親自確認目標已清空、沒有殘留,再移除資料夾:

dir /a "C:\欲刪除的頑固資料夾絕對路徑"
rd /s /q "C:\欲刪除的頑固資料夾絕對路徑"
rd /s /q C:\EmptyTempFolder

3-5 以 SYSTEM 身分清理 Temp(不改權限的替代方案)

如果 Temp 裡真的有檔案是被權限擋住(不是被程式鎖定),不要去奪權,改用 SYSTEM 身分去刪。但請注意:這個方案沒有預覽功能,也沒有連結點防護,而且以最高權限執行,所以只在已確認目錄結構、沒有連結點時使用;無法確認時,請回頭用 2-3 的腳本。

難度:進階資料風險:中可逆性:不可逆📖 理論建議
▶ 展開指令:SYSTEM 身分刪除(風險:中,先檢查連結點)

先取得 Microsoft Sysinternals 的 PsExec,以系統管理員身分開啟 CMD,開出 SYSTEM 視窗:

psexec -s -i cmd

在 SYSTEM 視窗中,先檢查有沒有連結點。若有列出任何項目,請不要往下做:

dir /a:l /s C:\Windows\Temp

確認沒有連結點,才執行。只刪裡面的項目,保留 Temp 資料夾本體:

del /f /s /q C:\Windows\Temp\*
for /d %i in (C:\Windows\Temp\*) do rd /s /q "%i"

第四部分:禁區,這幾件事請不要做

❌ 禁忌 1:對 Temp 資料夾「奪權」

網路上、AI 助理都很常給這個建議:先用 takeown 取得擁有權,再用 icacls 把完整控制權發給管理員群組,最後把裡面清空。它看起來有效,因為空間確實釋放了,這就是它迷人又危險的地方。

它的問題是:這類指令會改動整個資料夾樹的擁有者與存取控制清單,微軟為 Temp 設計的特殊規則(例如「一般使用者可建立檔案,但看不到別人的檔案」)可能因此遺失。我自己的案例,事後檢查是這樣:

•

資料夾上沒有任何原廠明確設定的規則,全部都變成從上層繼承。
•

一般使用者群組只剩「讀取與執行」,原廠的寫入規則不見了。
•

多出一條原廠沒有的、針對我個人帳號的完全控制規則。
•

資料夾的擁有者變成我的個人帳號。

對單人使用的管理員電腦,影響通常不會立刻出現;但標準使用者帳號或低權限程式寫入 Temp 時,可能被拒絕。好消息是 Windows 目錄本身沒有被動到,這是我另外檢查確認的。壞消息是:你得多花一輪功夫,才能把它弄回來。

正確觀念

暫存檔刪不掉,多數情況是被程式鎖定,奪取所有權無法解除鎖定。要處理,請走第二部分的腳本(鎖住的就跳過),或第三部分的 SYSTEM 身分方案,不要動權限。

▶ 展開:這是反面教材,當時執行的指令(⚠ 請勿執行)

請不要執行這四行。它們只用來讓你認得這類「強力清理」建議長什麼樣子:

takeown /f C:\Windows\Temp /r /d y
icacls C:\Windows\Temp /grant Administrators:F /t
del /f /s /q C:\Windows\Temp\*
for /d %i in (C:\Windows\Temp\*) do rd /s /q "%i"

如果你已經做過了,怎麼辦?先別慌,也不要再亂改。最穩的做法,是找一台沒動過的健康 Windows 當基準,比對後還原。條件很重要:Windows 版本與 Build 要相同、繼承狀態要相同、要比對完整權限清單與擁有者,而且沒有企業原則(群組原則)造成差異。沒有健康機器可比對時,不要宣稱已經還原,維持現狀、改天再處理,比亂補更安全。

難度:進階資料風險:中(改錯會讓問題更複雜)可逆性:可恢復(先備份目前設定)📖 理論建議(此還原流程尚未實測)
▶ 展開指令:檢查現況與以健康機器為基準還原(風險:中,請先備份)

先檢查現況。要看 Temp 的權限清單,也要確認它上層 Windows 目錄沒有被動到:

icacls C:\Windows\Temp
icacls C:\Windows

查擁有者,並在兩台機器上都執行下面兩行確認繼承狀態一致(False 表示繼承開啟):

Get-Acl C:\Windows\Temp | Format-List Owner
(Get-Acl C:\Windows\Temp).AreAccessRulesProtected

在問題機器上先備份目前狀態。注意:這個備份只含權限清單,不含擁有者,所以擁有者另外記下:

cd C:\Windows
icacls Temp /save C:\temp_acl_before.txt
powershell -NoProfile -Command "(Get-Acl C:\Windows\Temp).Owner" > C:\temp_owner_before.txt

在健康機器上存出基準,並記下它的擁有者:

cd C:\Windows
icacls Temp /save C:\temp_acl.txt

把基準檔拿到問題機器,還原。路徑基準必須一致:存的時候是在 C:\Windows 底下對 Temp 儲存,所以還原要對 C:\Windows 執行,不是對 C:\Windows\Temp:

icacls C:\Windows /restore C:\temp_acl.txt

最後把擁有者對齊健康機器(常見是下面這個,請以你的健康機器查到的為準),並再次比對輸出:

icacls "C:\Windows\Temp" /setowner "NT SERVICE\TrustedInstaller"
icacls C:\Windows\Temp

❌ 禁忌 2:手動刪除 Installer 與 WinSxS

•

C:\Windows\Installer(常見 5GB ~ 10GB):存放已安裝軟體的註冊與修復快取。手動刪除後,所有軟體無法更新、無法修復,也無法正常解除安裝。
•

C:\Windows\WinSxS(常見 5GB ~ 15GB):Windows 的核心元件存放區。手動刪裡面的檔案,輕則無法安裝更新,重則無法開機。要精簡它,只能用第二部分的 DISM。

❌ 禁忌 3:在安全模式刪掉 Temp 資料夾本體,再重新建立

刪掉資料夾再重建,新資料夾只會繼承上層 Windows 目錄的一般權限,失去 Temp 原有的特殊設定(例如一般使用者的寫入權限)。就算進了安全模式,也只能刪「裡面的內容」,保留資料夾本體。

一張表看完:該做、可以做、不要做

操作 對象 風險 建議
關閉休眠檔 所有人 🟢 低 先做(第一部分)
Windows 儲存空間(含 Windows.old) 所有人 🟢 低 先做(第一部分)
Windows Update 下載殘留 有基礎 🟢 低 更新閒置時再做
WinSxS 標準清理 有基礎 🟢 低 先評估,系統建議才做
Temp 預覽腳本 有基礎 🟢 低 先預覽,再執行
Docker 清理/WSL2 壓縮 工程師 🟠 高 先備份,初學者跳過
resetbase、清還原點、SYSTEM 身分、Robocopy 工程師 🟡 ~ 🟠 確認前置條件,初學者跳過
奪權 Temp、刪 Installer/WinSxS 任何人 🔴 禁止 不要做
我這次真正學到的,不是清了多少 GB

而是動手前,先問自己三件事:

① 這個指令會改什麼?
② 改了之後還能不能復原?
③ 我怎麼知道結果符合預期?

三個問題答不出來,就別執行。空間夠了,就停手。不要問「指令能不能執行」,要問「在什麼條件下才適合執行」。零組件都貴的年代,先把手邊的東西用好,再決定要不要花錢。

資料來源(關於記憶體與 SSD 行情的說明):
1. TrendForce 新聞稿:2026 年第四季記憶體合約價格展望(2026/9/30)
2. 科技新報:AI 記憶體短缺推升 SSD 價格(2026/4/9)
3. Notebookcheck:SSD 合約價一年內大漲的報導
4. BigGo 價格歷史記錄:Patriot P220 512GB 2.5 吋 SSD(Yahoo 購物中心,資料截至 2026/11/12)

驗證說明:本文的實測,都是在我個人的一台電腦上完成,屬於單一環境,Windows 版本與 Build 請以你自己的為準;標示 📖 的項目尚未實測。整理文件的過程,我用 AI 助理協助編排,並經過多輪交叉審閱,最終仍以實際操作為準。

Mr. τ|風雲網通系統(PCPiLOT)
相互尊重、信任與理解
#SSD漲價 #AI資料中心 #Windows #C槽空間 #儲存空間 #休眠檔 #DISM #WinSxS #Docker #WSL2 #ACL權限 #系統維護 #工程師思路
Last modified: 2026-11-14

Author

Comments

Write a Reply or Comment

Your email address will not be published.