許多使用者習慣在 Windows XP 透過「關機腳本 + 批次檔」自動清理系統垃圾,但升級 Vista 後卻發現大量檔案無法刪除。核心原因在於 Vista 採用 NTFS 權限機制,系統目錄下的檔案(如 C:\Windows\SoftwareDistribution\DataStore\Logs\edb.log)需要管理員權限才能刪除。即使以管理員身分登入,Vista 的 UAC(使用者帳戶控制)預設仍以標準權限執行關機腳本,導致 del /f /s /q %systemdrive%\*.log 等命令遭遇「拒絕存取」錯誤。
提醒:網路上流傳的清理腳本不一定適合所有環境,可能誤刪重要檔案,使用前請詳閱腳本內容。
要繞過 UAC 限制並自動執行,最佳做法是建立「以最高權限執行」的排程工作,再由關機腳本觸發該工作。
將清理批次檔存為 C:\clean.bat。
C:\clean.bat。完成嚮導後勾選「完成時開啟屬性」→「一般」分頁 → 「安全性選項」點「變更使用者或群組」輸入 Administrators → 勾選「使用最高權限執行」。
新增 C:\cl.bat,內容如下:
Rem 呼叫排程工作執行清理
Schtasks /run /tn clean
gpedit.msc 開啟群組原則編輯器。C:\cl.bat。之後每次關機,系統會以管理員權限(且不彈出 UAC 提示)自動執行清理工作。
若仍有檔案無法刪除(僅 SYSTEM 與內建 Administrator 擁有完全控制權),可使用 takeown 取得檔案擁有權,再用 icacls(Vista 建議用 icacls 取代 cacls)授予目前使用者完全控制權限。具用法請參閱 Windows 說明文件。
Vista 引入的 NTFS 權限與 UAC 機制,讓舊有自動清理腳本失效。善用「工作排程器 + 最高權限執行」即可完美解決,此技巧同樣適用於其他需要提權的自動化維護任務。