# Windows 更新文件怎么删，删了会失去什么

大家说的“Windows 更新文件”其实不是一个文件夹，一台普通电脑上通常有四堆，组件存储里被取代的旧版本组件，`C:\Windows\SoftwareDistribution\Download` 里的下载缓存，功能更新以后留在 `C:\Windows.old` 的上一版系统，还有拿来和其他电脑共享更新的传递优化缓存，它们各有各的清理入口，代价也差得很远，有的删了几乎没影响，有的删了就再也回不到上一个 Windows 版本。

先给结论，要空间就用磁盘清理或设置里的入口，`SoftwareDistribution` 留给修复卡住的更新，不当成省空间的地方，`Windows.old` 等新系统用稳了再删。

## 四个位置，四种代价

| 位置 | 里面是什么 | 用什么清理 | 清掉以后失去什么 |
| --- | --- | --- | --- |
| Windows 更新清理 | 组件存储里已更新组件的旧版本 | 磁盘清理里的“清理系统文件” | 这些组件提前失去回滚余地 |
| `SoftwareDistribution\Download` | Windows 更新下载下来的安装包 | 按微软的重置步骤，先停服务 | 还没装的更新要重新下载 |
| `Windows.old` | 升级前的那一版 Windows | 设置里的临时文件 | 恢复页里的“返回”选项 |
| 传递优化缓存 | 留着共享给别的电脑的更新和应用下载 | 磁盘清理，或者等它自己清 | 局域网里的其他电脑改从互联网下载 |

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-delete-windows-update-files-zh-mobile.webp" type="image/webp" width="768" height="1500">
    <img src="/img/blog/windows-delete-windows-update-files-zh.webp" width="1360" height="454" loading="lazy" alt="更新文件各有代价">
  </picture>
  <figcaption>四类更新文件放在不同位置，由不同的系统工具清理，失去的东西也各不相同。</figcaption>
</figure>

## 删之前先量一下

打开设置 › 系统 › 存储，点“临时文件”，Windows 会按类别列出大小，先看清更新相关的几项到底占了多少，如果 C 盘是被游戏库或者视频工程塞满的，清几百 MB 更新缓存解决不了问题。

组件存储那一块，资源管理器给 `C:\Windows\WinSxS` 算出来的数字因为硬链接会偏大很多，怎么用 DISM 量出真实开销，[WinSxS 清理那篇](/zh/windows/blog/winsxs-folder-cleanup-windows)已经讲过，这里不重复。

## 磁盘清理里的“Windows 更新清理”

四种里这一种最稳，通常也是第一个该试的：

1. 在任务栏搜索“磁盘清理”并打开。
2. 选系统盘，点确定。
3. 点“清理系统文件”，再选一次系统盘，点确定。
4. 勾选“Windows 更新清理”，点确定，再点“删除文件”。

[微软的组件存储说明](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/clean-up-the-winsxs-folder)写明这一项会减小组件存储，Windows 平时也会按计划做类似的清理，一些组件的旧版本会保留一段时间，方便出问题时回滚，过了这段时间再自动移除，自己动手清理只是把这一步提前了。

代价就是这段回滚余地，刚装完一个大的累积更新，打印机、驱动和常用软件还没确认正常的时候，先等几天再清。更激进的 DISM 参数 `/ResetBase` 会让已装的更新都不能再卸载，WinSxS 那篇讲了它，用磁盘清理不需要碰它。

## SoftwareDistribution\Download 是修复用的，不是省空间用的

`C:\Windows\SoftwareDistribution\Download` 是 Windows 更新存放已下载安装包的地方，正常更新时由系统自己管理，大块空间一般也不藏在这里，清空它是给下载或安装反复失败的更新做修复，微软也是按修复步骤来介绍的。

[微软的重置说明](https://learn.microsoft.com/en-us/troubleshoot/windows-client/installing-updates-features-roles/additional-resources-for-windows-update)先建议跑 Windows 更新疑难解答，还不行再手动处理，第一步是停掉占用这些文件的服务，免得一边处理文件夹一边有程序往里写，以管理员身份打开命令提示符：

```cmd
net stop bits
net stop wuauserv
net stop cryptsvc
```

微软的做法是把文件夹改名而不是直接删除，并且说明只有前面的重置步骤都没解决问题时才做这一步：

```cmd
Ren %Systemroot%\SoftwareDistribution\DataStore DataStore.bak
Ren %Systemroot%\SoftwareDistribution\Download Download.bak
Ren %Systemroot%\System32\catroot2 catroot2.bak
```

处理完再把服务启动回来：

```cmd
net start bits
net start wuauserv
net start cryptsvc
```

改名能把旧内容留到确认更新恢复正常为止，Windows 更新会建新的文件夹，重新下载还需要的部分，等设置 › Windows 更新里能顺利装上更新，再删掉那几个 `.bak` 文件夹。同一篇文章里还有一个“实在不行”的简短写法，会删掉整个 `SoftwareDistribution`，连 `DataStore` 也一起删，不只是下载内容，它被放在最后一步，就按最后一步对待。

最该避免的是 Windows 更新还在运行时直接删这个文件夹，被占用的文件删不掉，正在下载的内容也可能断在一半。

Mole for Windows 的优化页里有一个范围更窄的同类修复，叫“重置卡住的更新下载”，只有同一个更新在最近 30 天里连续至少两次安装失败才会出现，Windows 正在安装更新或者等待重启时不做，30 天内最多做一次。它会停掉 Windows 更新和 BITS，只清空 `Download` 文件夹，再把原来在运行的服务启动回来，不动 `DataStore`、`catroot2`，也不改更新设置和策略。

## Windows.old 和 10 天期限

升级系统或者装完功能更新以后，上一版系统会放在 `C:\Windows.old`，设置 › 系统 › 恢复里的“返回”就靠它。[微软的回退说明](https://support.microsoft.com/windows/deployment/install-upgrade/go-back-to-the-previous-version-of-windows)写着，大多数情况下有 10 天时间，想要回退，需要保留 `windows.old` 和 `$windows.~bt` 两个文件夹，删掉升级后新加的用户账户，升级时用过 U 盘的话还要准备好那个 U 盘。回退会保留个人文件，但升级后装的软件和驱动会被移除。

很多时候根本不用自己删，[微软的删除说明](https://support.microsoft.com/en-us/windows/deployment/install-upgrade/delete-your-previous-version-of-windows)写明升级 10 天后旧版本会被自动删除。想提前删，就去设置 › 系统 › 存储 › 临时文件，勾选“以前版本的 Windows”，点“删除文件”，同一页也提醒了，删了就不能撤销。

动手之前，先把可能让你想回退的事情过一遍，常用软件能不能打开，打印机能不能打印，VPN 能不能连上，在意的文件是不是已经在自己的用户文件夹里，而不是只躺在 `Windows.old` 里。文档备份替代不了这一步检查，因为“返回”恢复的是系统，不是你的文件。

## 传递优化缓存

传递优化让电脑可以从局域网里的其他电脑下载 Windows 更新和应用商店的更新，允许的话也可以从互联网上的电脑下载，同时把自己下载过的内容分享出去。[微软的传递优化说明](https://support.microsoft.com/en-us/windows/deployment/updates-lifecycle/delivery-optimization-in-windows)写着，缓存会在一小段时间后或者占用太多空间时自动清理，想提前清，就在磁盘清理里勾选“传递优化文件”。

“一小段时间”具体是多久，[传递优化参考文档](https://learn.microsoft.com/en-us/windows/deployment/do/waas-delivery-optimization-reference)给了默认值，单个文件最多保留三天，缓存最多占可用空间的 20%。清掉它代价很小，Windows 更新安装用的是自己的下载，别的电脑会改从微软下载，不再从你这里拿。想改这台电脑要不要分享，去设置 › Windows 更新 › 高级选项 › 传递优化。

Mole 的清理页会把这块缓存列成“传递优化文件”，Mole 是请传递优化服务自己删除已经下载完成的文件，还在下载的和被固定保留的都不碰，也不会去夺取这个服务文件夹的所有权。

## 清完怎么核对

- 再打开一次磁盘清理或临时文件，和清理前的各项大小对比。
- 打开设置 › Windows 更新，点“检查更新”，能正常搜索和安装。
- 打开设置 › 系统 › 恢复，删掉 `Windows.old` 以后“返回”不见了是正常的，如果其实还需要它，已经找不回来了。

## 不要这样做

- 不要手动删 `WinSxS` 里的文件，也不要从 TrustedInstaller 手里夺权强删。
- 不要在 Windows 更新服务运行时删 `SoftwareDistribution`，也不要把它当成日常清理空间的地方。
- 不要因为 `Windows.old` 大，升级后头几天就把它删了。
- 不要为了让这些文件夹别再变大就禁用 Windows 更新或 BITS 服务，那样安全更新也一起停了。

C 盘还有别的东西在占空间，可以接着看 [C 盘空间分类排查](/zh/windows/blog/windows-c-drive-full) 和 [找出大文件](/zh/windows/blog/find-large-files-on-windows)。

## 常见问题

### Windows 更新文件可以删吗？

可以，只要用 Windows 自带的入口，磁盘清理里的“Windows 更新清理”和“传递优化文件”，以及临时文件里的“以前版本的 Windows”。代价是组件更早失去回滚余地，删 `Windows.old` 则意味着不能再用“返回”。

### SoftwareDistribution 文件夹能删吗？

只建议在更新反复失败时当作修复来做，而且要先停掉 Windows 更新服务。微软的步骤是把 `Download` 和 `DataStore` 改名而不是删除，等更新恢复正常再删掉改名后的副本。

### Windows.old 会在电脑上留多久？

大多数情况下是升级后 10 天，之后 Windows 会自动删除它，“返回”选项也随之消失。

### 删除传递优化文件会影响更新吗？

不会，这些是留着分享给其他电脑的副本，Windows 更新再需要某个文件时会从微软下载，这块缓存本身过几天也会自动清理。


Canonical: https://mole.fit/zh/windows/blog/delete-windows-update-files
