1. 从一条提示词说起为什么“清理C盘”值得做成AI智能体“清理C盘提示词”这个标题乍一看像是个小工具但它背后其实藏着一个非常典型的AI智能体落地场景把Windows系统里那些零散、危险、需要管理员权限的磁盘清理操作封装成一段结构化的自然语言指令交给大模型去理解、规划、执行。我最初接触这个方向是因为身边太多人——包括一些写了十年代码的老哥——C盘红了之后第一反应还是去下载“C盘清理大师”“C盘瘦身专家”这类软件结果装完发现清理效果一般反而多了一堆开机自启和弹窗。后来我干脆自己写了一套提示词加PowerShell脚本的组合方案用AI智能体来驱动整个清理流程实测下来比市面上大多数免费清理软件更干净、更可控。这篇文章要聊的就是这套方案的完整思路提示词怎么写、PowerShell脚本怎么配合、robocopy怎么用来做安全迁移、哪些目录绝对不能碰、遇到“C盘满了开不了机”这种极端情况怎么救。适合两类人看一类是想给自己的AI智能体加一个“系统运维”技能的开发者另一类是单纯想把C盘清干净、又不想装乱七八糟软件的普通用户。全文会给出可直接抄作业的提示词模板和脚本片段也会把我在实际踩坑中总结的注意事项全部摊开讲。2. 整体设计思路为什么用提示词驱动而不是直接写死脚本2.1 传统清理脚本的三大痛点大部分人清理C盘的方式无非两种手动删文件或者跑一个写死的批处理脚本。手动删的问题在于你不知道哪些能删哪些不能删删错了轻则软件报错重则系统起不来。写死脚本的问题更隐蔽——它看起来“自动化”了但实际上把所有机器当成同一台机器对待。我见过一个很典型的翻车案例有人在网上抄了一段“一键清理C盘”的bat脚本里面有一行del /f /s /q C:\Windows\Temp\*.*看起来没问题对吧但这台机器上恰好有个服务把运行时数据放在Temp目录下脚本一跑服务直接崩了而且因为文件被删日志也没了排查了半天。这就是写死脚本的典型问题它不理解上下文。传统脚本的第二个痛点是无法处理模糊指令。用户说“帮我清理一下C盘”这句话里没有指定清理目标、没有指定清理力度、没有指定是否允许删除下载文件夹里的东西。写死脚本只能一刀切而AI智能体可以先反问、再规划、最后执行。第三个痛点是缺乏安全边界。一个合格的清理工具应该知道哪些目录是禁区比如C:\Windows\System32、C:\Program Files、用户目录下的.ssh和.gitconfig。写死脚本往往没有这层判断而提示词可以明确把这些禁区写进去让模型在规划阶段就避开。2.2 提示词加智能体的分工逻辑我这套方案的分工是这样的提示词负责“理解意图、制定计划、安全校验”PowerShell负责“实际执行”。AI智能体拿到用户的自然语言指令后先解析出清理目标比如“系统临时文件”“浏览器缓存”“Windows更新残留”然后生成一份操作计划计划里每一项都对应一个具体的PowerShell命令。在执行前智能体会检查每个命令是否触碰了禁区列表确认无误后才调用PowerShell执行。这个分工的好处是提示词层可以随时调整策略不用改脚本脚本层只负责执行原子操作逻辑简单、不易出错。而且因为提示词是自然语言用户可以随时追加约束条件比如“不要动我的下载文件夹”“保留最近七天的临时文件”智能体都能理解并纳入计划。2.3 为什么选PowerShell而不是CMD或第三方工具选PowerShell的理由很直接它能拿到比CMD更细的信息也能做比CMD更安全的操作。举个例子CMD里查看文件夹大小需要借助dir /s然后自己算而PowerShell一行Get-ChildItem -Recurse | Measure-Object -Property Length -Sum就搞定了。再比如删除文件PowerShell的Remove-Item支持-WhatIf参数可以先模拟执行看看到底会删哪些东西确认无误再去掉-WhatIf真正执行。这个特性在清理C盘这种高风险场景里简直是救命稻草。至于第三方工具我不是说它们不好而是它们大多把逻辑封装在黑盒里你不知道它到底删了什么、改了哪些注册表。对于追求可控性的场景自己用PowerShell加提示词搭一套透明度高得多。3. 核心细节解析提示词的结构与关键约束3.1 提示词的基本骨架一条合格的“清理C盘提示词”不是随便写一句“帮我清理C盘”就完事的。它需要包含四个部分角色定义、任务描述、安全约束、输出格式。我常用的模板长这样你是一个Windows系统运维助手专门负责C盘空间清理。 你的任务是分析用户提供的磁盘占用信息制定清理计划并生成对应的PowerShell命令。 安全约束 1. 禁止删除 C:\Windows\System32、C:\Windows\SysWOW64 下的任何文件 2. 禁止删除 C:\Program Files 和 C:\Program Files (x86) 下的文件 3. 禁止删除用户目录下的 .ssh、.gitconfig、.gnupg 目录 4. 禁止删除任何 .exe、.dll、.sys 文件除非明确确认是临时文件 5. 所有删除操作必须先输出 -WhatIf 模拟结果确认后再执行 输出格式 - 先列出清理目标及预计释放空间 - 再给出对应的PowerShell命令 - 最后给出风险提示这个模板的关键在于安全约束必须具体到路径级别。你不能只写“不要删除系统文件”因为模型对“系统文件”的理解可能和你不一致。写清楚具体路径模型才能准确避开。3.2 安全约束的优先级设计安全约束不是随便列几条就行的它需要有优先级。我的做法是把约束分成三级优先级约束类型示例违反后果P0绝对禁止删除System32下的文件系统崩溃P1需确认删除用户文档目录下的文件数据丢失P2建议避免删除浏览器缓存需重新登录P0级别的约束是硬性的模型在任何情况下都不能违反。P1级别的约束需要用户二次确认。P2级别的约束可以执行但要在输出里提醒用户可能的影响。这个分级设计的好处是当用户说“清理得彻底一点”时模型知道可以放宽P2但绝不能碰P0。3.3 提示词里的“禁区清单”怎么写禁区清单是提示词里最重要的部分。我整理了一份经过实战检验的清单你可以直接拿去用绝对禁区任何情况下不得删除 - C:\Windows\System32 - C:\Windows\SysWOW64 - C:\Windows\WinSxS - C:\Program Files - C:\Program Files (x86) - C:\ProgramData\Microsoft\Windows\Start Menu - 用户目录下的 .ssh、.gnupg、.gitconfig、.bashrc - 任何扩展名为 .sys、.drv 的文件 谨慎处理需用户确认 - C:\Users\[用户名]\Documents - C:\Users\[用户名]\Desktop - C:\Users\[用户名]\Downloads - C:\Windows\Temp部分服务会用到 可以清理直接执行 - C:\Windows\Temp 下的临时文件排除正在使用的 - C:\Users\[用户名]\AppData\Local\Temp - C:\Windows\SoftwareDistribution\Download - 浏览器缓存目录 - C:\Windows\Prefetch这份清单不是拍脑袋写的。WinSxS目录虽然看起来很大但它里面是组件存储删了会导致系统更新失败甚至无法启动。Prefetch目录可以清理但清理后首次启动程序会慢一点这个要在输出里告诉用户。3.4 让智能体先“看”再“动”一个常见的错误是让智能体直接开始清理而不先分析磁盘占用情况。我的做法是在提示词里强制要求第一步必须先运行磁盘分析命令拿到数据后再制定计划。分析命令我通常用这两条# 查看各盘剩余空间 Get-PSDrive -PSProvider FileSystem | Select-Object Name, {NUsed(GB);E{[math]::Round($_.Used/1GB,2)}}, {NFree(GB);E{[math]::Round($_.Free/1GB,2)}} # 查看C盘下各一级目录的大小 Get-ChildItem C:\ -Directory | ForEach-Object { $size (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]{ Folder $_.Name; SizeGB [math]::Round($size/1GB,2) } } | Sort-Object SizeGB -Descending第一条命令让你知道C盘到底还剩多少空间第二条让你知道空间被谁占了。有了这两组数据智能体才能有针对性地制定清理计划而不是盲目地删Temp目录。4. 实操过程从分析到执行的完整流程4.1 第一步磁盘占用分析假设你现在C盘只剩5GB系统已经开始卡顿。第一步不是急着删东西而是先搞清楚空间去哪了。除了上面那两条命令我还会用WizTree或者TreeSize这类工具做可视化分析但如果你不想装软件PowerShell也能搞定。我常用的一个分析脚本是这样的# 找出C盘下最大的20个文件夹 Get-ChildItem C:\ -Directory -ErrorAction SilentlyContinue | ForEach-Object { $folder $_ $size (Get-ChildItem $folder.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]{ Path $folder.FullName SizeGB [math]::Round($size/1GB, 2) } } | Sort-Object SizeGB -Descending | Select-Object -First 20 | Format-Table -AutoSize这个脚本跑起来可能需要几分钟取决于你的硬盘速度。跑完之后你会得到一张表清楚地看到哪个文件夹占了多少空间。根据我的经验C盘空间通常被这几类东西吃掉Windows更新残留SoftwareDistribution\Download、休眠文件hiberfil.sys、页面文件pagefile.sys、各种缓存目录、以及用户自己下载的东西。4.2 第二步生成清理计划拿到分析结果后把数据喂给智能体让它生成清理计划。比如你把上面那张表贴给智能体它会输出类似这样的计划根据分析结果C盘空间主要被以下内容占用 1. C:\Windows\SoftwareDistribution\Download - 8.2GBWindows更新残留 2. C:\Users\XXX\AppData\Local\Temp - 3.5GB临时文件 3. C:\Windows\Temp - 2.1GB系统临时文件 4. C:\Users\XXX\Downloads - 12.4GB下载文件需确认 建议清理计划 - 清理Windows更新残留预计释放8.2GB风险低 - 清理用户临时文件预计释放3.5GB风险低 - 清理系统临时文件预计释放2.1GB风险低 - 下载文件夹需你确认哪些文件可以删除 预计总释放空间13.8GB不含下载文件夹这个计划的好处是每一项都有预计释放空间和风险等级你可以根据实际情况决定执行哪些。4.3 第三步用-WhatIf做安全预演在真正删除之前一定要用-WhatIf参数做一次预演。比如清理Windows更新残留的命令是Remove-Item -Path C:\Windows\SoftwareDistribution\Download\* -Recurse -Force -WhatIf加上-WhatIf后PowerShell不会真的删除而是告诉你“如果执行会删除哪些文件”。你看到输出后确认没问题再去掉-WhatIf真正执行。这个步骤看起来麻烦但它能帮你避免99%的误删事故。我个人的习惯是任何删除操作第一次执行必须带-WhatIf。这条规则我坚持了三年期间至少避免了五次重大误删。4.4 第四步用robocopy做安全迁移有些文件不是要删而是要挪走。比如你的下载文件夹里有12GB的文件你不想删但想挪到D盘。这时候robocopy就派上用场了。相比直接剪切粘贴robocopy的优势是支持断点续传、支持多线程、支持镜像模式、出错会重试。我常用的迁移命令是这样的# 把下载文件夹迁移到D盘 robocopy C:\Users\XXX\Downloads D:\Downloads /E /MOVE /MT:16 /R:3 /W:5 /LOG:C:\migrate_log.txt参数解释/E表示包含所有子目录包括空目录/MOVE表示迁移后删除源文件/MT:16表示用16个线程加速/R:3表示失败重试3次/W:5表示重试间隔5秒/LOG把日志写到文件里方便排查。迁移完成后你还需要把原路径做成一个符号链接这样原来指向下载文件夹的程序还能正常工作# 删除原目录确认迁移成功后 Remove-Item C:\Users\XXX\Downloads -Recurse -Force # 创建符号链接 New-Item -ItemType SymbolicLink -Path C:\Users\XXX\Downloads -Target D:\Downloads这个符号链接的操作需要管理员权限而且要在迁移确认无误后再做。我踩过的坑是有一次迁移还没完全结束就急着删原目录结果部分文件丢失幸好有备份。4.5 第五步处理休眠文件和页面文件hiberfil.sys和pagefile.sys这两个文件通常占用几GB到十几GB不等。休眠文件可以通过关闭休眠来删除# 关闭休眠会删除hiberfil.sys powercfg -h off但要注意关闭休眠后你就不能用“休眠”功能了只能用“睡眠”。如果你经常用休眠建议保留。页面文件pagefile.sys不建议直接删除但可以调整大小或移到其他盘。调整方法是在“系统属性 - 高级 - 性能 - 虚拟内存”里改或者用PowerShell# 查看当前页面文件设置 Get-WmiObject Win32_PageFileSetting | Select-Object Name, InitialSize, MaximumSize页面文件的大小一般建议设置为物理内存的1到1.5倍。如果你有16GB内存页面文件设成16GB到24GB比较合适。设太小会导致系统不稳定设太大又浪费空间。5. 常见问题与排查技巧实录5.1 PowerShell乱码怎么办这是被问得最多的问题之一。PowerShell乱码通常是因为编码设置不对。解决方法是在脚本开头加上[Console]::OutputEncoding [System.Text.Encoding]::UTF8 $OutputEncoding [System.Text.Encoding]::UTF8如果是PowerShell 5.1还需要改一下注册表或者用chcp 65001切换代码页。我一般直接在脚本第一行加chcp 65001 $null简单粗暴有效。5.2 “PowerShell被终止”或错误代码2146868246这个错误通常出现在执行策略限制或者脚本被安全软件拦截的时候。先检查执行策略Get-ExecutionPolicy -List如果显示Restricted需要改成RemoteSignedSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser错误代码2146868246通常是脚本执行超时或者被强制终止。如果你在跑一个耗时很长的清理脚本建议加上进度输出避免看起来像卡死Write-Progress -Activity 清理中 -Status 正在处理 $folder -PercentComplete $percent5.3 C盘满了开不了机怎么救这是最极端的情况。如果C盘真的满到系统无法启动你需要用WinREWindows恢复环境来救。进入WinRE的方法通常是强制关机三次第四次开机会自动进入恢复环境。进去之后选择“疑难解答 - 高级选项 - 命令提示符”然后就可以用命令行清理了。在WinRE里你的系统盘可能不是C盘需要先确认diskpart list volume exit找到系统盘对应的盘符后就可以清理了。优先清理这几个目录del /f /s /q X:\Windows\Temp\*.* del /f /s /q X:\Windows\SoftwareDistribution\Download\*.*注意把X换成实际的系统盘盘符。清理完之后重启通常就能进系统了。5.4 常见问题速查表问题现象可能原因解决方法PowerShell提示“禁止运行脚本”执行策略限制Set-ExecutionPolicy RemoteSigned清理后软件报错误删了运行时文件从回收站恢复或重装软件robocopy迁移后原程序找不到文件未创建符号链接用New-Item创建SymbolicLink清理后系统更新失败删了WinSxS里的文件用DISM修复DISM /Online /Cleanup-Image /RestoreHealthC盘空间清理后很快又满了没找到真正的占用源用WizTree做可视化分析休眠文件删不掉休眠功能未关闭powercfg -h off5.5 几个我踩过的坑第一个坑不要用第三方“C盘清理大师”类软件。这类软件很多会捆绑安装其他程序或者把你的文件上传到云端分析。我见过一个案例用户装了某清理软件后浏览器主页被改了还多了一堆开机自启项。自己用PowerShell清理虽然麻烦一点但至少知道自己在做什么。第二个坑清理Prefetch目录要谨慎。Prefetch里存的是程序启动的预读数据删了之后首次启动程序会变慢。如果你经常用某个大型软件建议保留它的Prefetch文件。第三个坑不要盲目清理AppData目录。AppData里存的是各种软件的配置和数据删错了会导致软件重置甚至数据丢失。比如Chrome的AppData里存着你的书签和登录状态删了就得重新登录所有网站。第四个坑清理前一定要备份。我现在的习惯是任何清理操作之前先用robocopy把要动的目录备份到D盘。虽然多花几分钟但万一删错了还能恢复。6. 进阶玩法把清理流程做成AI智能体技能6.1 智能体的工具定义如果你在开发AI智能体可以把清理C盘做成一个技能Skill让智能体在用户说“C盘满了”的时候自动调用。工具定义大概长这样{ name: clean_c_drive, description: 清理Windows系统C盘空间支持分析磁盘占用、清理临时文件、迁移大文件, parameters: { action: { type: string, enum: [analyze, clean_temp, clean_update, migrate], description: 要执行的操作类型 }, target_path: { type: string, description: 迁移操作的目标路径仅migrate时需要 }, dry_run: { type: boolean, description: 是否只模拟执行不实际删除 } } }这个定义的关键是dry_run参数默认设为true让智能体先模拟执行用户确认后再真正清理。这个设计能极大降低误删风险。6.2 智能体的决策流程智能体拿到用户指令后决策流程应该是这样的先判断用户意图是“分析”还是“清理”如果是清理再判断清理力度是“保守”还是“激进”。保守模式只清理Temp和更新残留激进模式可以清理Prefetch和部分缓存。然后根据当前磁盘占用数据生成具体的清理计划最后调用PowerShell执行。这个流程里最重要的是意图识别和力度判断。用户说“C盘有点满”和“C盘爆了”对应的清理力度应该是不一样的。前者可以保守一点后者可以激进一点但无论如何都不能碰P0级别的禁区。6.3 容错与回滚设计任何自动化清理方案都必须有回滚机制。我的做法是所有删除操作先移到回收站而不是直接永久删除。PowerShell里可以用Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile方法把文件移到回收站Add-Type -AssemblyName Microsoft.VisualBasic [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile( C:\path\to\file, OnlyErrorDialogs, SendToRecycleBin )这样即使删错了用户也能从回收站恢复。等确认系统运行正常后再清空回收站释放空间。7. 一些实用的补充技巧7.1 用存储感知自动清理Windows 10和11自带“存储感知”功能可以自动清理临时文件和回收站。开启方法是在“设置 - 系统 - 存储”里打开“存储感知”然后配置自动清理规则。这个功能虽然不如手动清理彻底但胜在自动化适合不想折腾的用户。7.2 关闭Windows更新缓存Windows更新下载的安装包会存在C:\Windows\SoftwareDistribution\Download目录下更新完成后这些文件其实可以删。但直接删可能会影响正在进行的更新所以建议先停止更新服务net stop wuauserv Remove-Item C:\Windows\SoftwareDistribution\Download\* -Recurse -Force net start wuauserv这个操作我一般一个月做一次每次能释放几GB空间。7.3 用DISM清理组件存储WinSxS目录不能直接删但可以用DISM工具清理里面的旧组件DISM /Online /Cleanup-Image /StartComponentCleanup这个命令会清理被取代的组件版本通常能释放几GB空间。加上/ResetBase参数可以清理得更彻底但清理后就不能卸载已安装的更新了。7.4 把大文件迁移到其他盘如果你的电脑有D盘或其他分区可以把一些大目录迁移过去。常见的可迁移目录包括下载、文档、图片、视频、以及各种软件的缓存目录。迁移后用符号链接指回原路径软件感知不到变化。我个人的配置是C盘只放系统和常用软件所有用户数据都在D盘。这样即使C盘出问题需要重装数据也不会丢。7.5 定期检查磁盘健康C盘空间异常减少有时候是硬盘故障的前兆。建议定期用chkdsk检查磁盘chkdsk C: /f /r这个命令会检查并修复文件系统错误/r参数还会扫描坏扇区。跑一次可能需要几十分钟建议在不用电脑的时候跑。8. 关于提示词工程的一点个人体会写了这么多最后聊几句我在提示词工程上的体会。清理C盘这个场景让我意识到好的提示词不是把模型当搜索引擎用而是把模型当一个需要明确边界和流程的执行者。你得告诉它什么能做、什么不能做、先做什么后做什么、遇到不确定的情况怎么办。这些约束写得越清楚模型的输出就越可靠。另一个体会是提示词和脚本的边界要清晰。提示词负责决策和规划脚本负责执行。不要让提示词去生成复杂的PowerShell代码也不要让脚本去做判断。各司其职整个系统才稳定。最后一个建议任何自动化清理方案第一次跑的时候都要盯着。别设个定时任务就不管了。我见过太多因为自动化脚本误删文件导致的事故事后复盘发现都是因为第一次跑的时候没人看着。等你跑过几次确认脚本行为符合预期了再考虑自动化。