你是否曾遭遇过这样的困扰:想要删除系统残留文件夹,比如 Windows.old、System Volume Information 或 WindowsApps,系统却弹窗提示“错误 0x80070091:目录不是空的”?明明打开文件夹一看,里面空无一物,连隐藏文件都已显示出来,可它就是无法删除。别急着怀疑自己的操作——这背后的根源,实际上与 NTFS 文件系统的底层元数据有关。系统将某个不可见的条目(例如损坏的卷影副本、非法命名的子项,或尚未释放的句柄)标记为“非空”,因此拒绝执行删除操作。遇到“0x80070091 文件夹不为空”错误,通常只需几步底层清理即可解决。

先通过 vssadmin 清除卷影副本,解除还原点级锁定
系统还原点和卷影副本都隐藏在 System Volume Information 这个文件夹中。它们并非普通文件夹,而是由 VSS(卷影复制服务)专门管理的元数据容器。如果某个副本损坏,系统会始终认为该目录“内部有内容”,从而导致整个父路径无法清空。解决 Windows 删除文件夹时提示“目录不是空的”,首要步骤就是清理这些卷影副本。
打开任务栏搜索框,输入 cmd,然后右键点击“命令提示符”,选择“以管理员身份运行”。
先输入 vssadmin list shadows 回车,查看当前有哪些卷影副本。如果输出为空或报错,说明已经存在异常。直接执行下面这条命令:
vssadmin delete shadows /all /quiet
回车后等待返回“已成功删除所有阴影副本”。这一步会清空所有还原点快照索引,不会影响当前系统运行,但会删除所有可回滚的还原点。执行完毕立刻尝试右键删除目标文件夹——你可能会发现,很多情况下此时已经能成功删除了。
手动获取 System Volume Information 完全控制权并清理残留子项
Windows 默认不允许你直接访问 System Volume Information。里面那些形如 {a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8} 的文件夹,其实就是旧还原点留下的元数据残留。它们可能大小为 0 字节,创建时间比系统安装日期还早,但因为权限被锁定,系统自身也无法自动回收。针对“目录不是空的”错误,手动授予权限并删除这些子项是有效方法。
在刚才的管理员命令提示符中,依次执行下面两条命令:
icacls "C:System Volume Information" /grant administrators:F /t
attrib -h -r -s "C:System Volume Information"
然后打开文件资源管理器,在地址栏直接粘贴 C:System Volume Information 并回车。如果仍提示“拒绝访问”,说明上一步赋权未生效,需要重启命令提示符重试一次。
找到名称含 { 和 } 的子文件夹,逐一右键 → “属性” → 查看“大小”和“修改日期”。优先删除那些大小为 0 字节、修改时间早于你最近一次系统更新的项。切勿删除整个 System Volume Information 文件夹,只删其内部特定 GUID 命名的子项。
用 Robocopy 镜像清空 WindowsApps 或嵌套顽固目录
有些文件夹内部包含 NTFS 循环链接、超长路径或损坏的短文件名,常规删除会卡在解析阶段。这时可以用 Robocopy 的 /MIR 参数,它不校验内容,只强制将目标结构同步为“源为空”的状态,相当于从底层重写目录树。这是解决“0x80070091 文件夹不为空”错误的进阶技巧。
方法一:PowerShell 管理员模式(推荐)
进入目标文件夹所在的父目录(例如 C:\Program Files),按住 Shift 键,右键空白处 → “在此处打开 PowerShell 窗口(管理员)”。在同一目录下新建一个名为 Empty 的空白文件夹。执行:
robocopy .\Empty .\WindowsApps /MIR
把 WindowsApps 替换为你实际要删的文件夹名。等待输出末尾出现“已复制: 0”且无红色报错后,刷新资源管理器——原文件夹图标通常立即消失,或可直接右键删除。
方法二:批处理一键执行(适配中文路径/空格)
在目标文件夹的同级目录下新建一个记事本,粘贴以下内容:
@echo off
mkdir Empty
robocopy "Empty" "%~n1" /MIR
rmdir /s /q "Empty"
pause
保存为 clean.bat,然后把要删的文件夹拖到该 bat 文件图标上释放——自动完成三步,无需手动输路径。
PowerShell 强制穿透删除,绕过所有 Win32 层限制
第一步:以管理员身份运行 PowerShell
按 Win + R → 输入 powershell → 按 Ctrl + Shift + Enter 确认。
第二步:获取所有权并赋权
粘贴执行:
takeown /f "C:Windows.old" /r /d y & icacls "C:Windows.old" /grant administrators:F /t
把路径换成你的目标文件夹完整路径。
第三步:强制删除
粘贴执行:
CMD /C "RD /S /Q \\?\C:Windows.old"
必须用 \\?\ 前缀,否则路径超长或含特殊字符时会失败。命令无任何输出即表示成功。若仍提示“拒绝访问”,说明有进程正在占用该路径,需要配合 Process Hacker 终止 SkyHost.exe 或 TrustedInstaller 进程后再试。此方法几乎能强制删除任何顽固的系统残留文件夹,彻底解决“目录不是空的”报错。
