前言前两个月升级了 Windows 11,那自然是 bug 一堆(现在也是,不过好很多)。

前言

前两个月升级了 Windows 11,那自然是 bug 一堆(现在也是,不过好很多)。在用 OneDrive 的时候突然发现右键释放空间的选项在某些文件夹上会变灰不可用,升级之前 Windows 10 是没这个毛病的。具体表现如下:

有两个文件夹,Programs 和 Questionnaire。Programs 显示为仅云端存储,Questionnaire 显示为本地 + 云端存储。
466f15bc8a5badda8ebff5d35351e4ca81e98efd.png@!web-article-pic.avif
在 Programs 里面,有文件是本地 + 云端存储:
29b660c05eae53b89223a0e5818e1176d82ba356.png@1256w_182h_!web-article-pic.avif
现在我想批量释放本地空间。但是我在 Programs 上右键,发现我没办法释放空间。
a866c792b37914ba0bd9df6dd18cd6ccb0990125.png@!web-article-pic.avif
而在 Questionnaire 上右键就可以释放空间。

也就是说,这个 OneDrive 判断,外层文件夹是仅云端存储状态,里面的文件就一定是仅云端存储,所以它认为没必要释放空间,但是事实不是这样。

由于学业方面的压力,前段时间一直把这个事情放着没管,毕竟不影响使用。最近放假了就可以研究研究怎么解决这个问题。

正文

忘了什么时候,我在不知道哪里知道了 OneDrive 这个功能是用文件属性来实现的,而文件属性可以通过命令行工具 attrib 进行修改。于是我先在 Programs 文件夹下执行了 attrib 命令,看看文件的属性表。
c2a76ce5a70fef3f0ccbb013a33fd55d2242bf44.png@1256w_738h_!web-article-pic.avif
发现仅云端存储的文件比正常文件多了两个属性:OU

推测给文件加上这两个属性之后,文件就会从本地删除。所以先试执行 attrib +O +U dummy.exe,然后查看属性列表:
7fe2d12916b6416931fdd48eac78c81328ec5641.png@1256w_716h_!web-article-pic.avif
属性已经加上了,查看资源管理器:
2dcf909cbfdd43988c8abdd8d077124f8101146c.png@1256w_186h_!web-article-pic.avif
发现这个文件已经变成仅云端保存了。执行前后对比:
06feb7abab43af3413fa40552958697a61851458.png@!web-article-pic.avif
磁盘占用已经变成 0 了。

那么回到问题上,怎么批量、递归地给文件设置属性?

查看 attrib 的帮助,发现 attrib 工具很贴心的有了 /S /D 两个开关,可以递归地设置文件和文件夹的属性。例如在 Questionnaire 目录里执行:attrib +O +U * /S /D:
e6a8f5eff94fd7a0f53e3217088a1815fc6d93d8.png@1256w_738h_!web-article-pic.avif
再看 Questionnaire 中的文件,它们已经全部从本地被删除了:

这两个属性是干啥的?

查看 attrib 的帮助:
7da7542b0d5088ca5afc6c37c305c0b50775be9e.png@1256w_648h_!web-article-pic.avif
发现 O 和 U 分别对应 Offline 和 Unpinned 两个属性。

查阅微软的官方文档(https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/ca28ec38-f155-4768-81d6-4bfeb8586fc9):
04c4e9f00ba5a59e167bb431cd12ab52a62b0817.png@1256w_1122h_!web-article-pic.avif
大意就是:

  • 具有 Offline 属性的文件的数据不是立刻就能被使用的,实际的文件数据被移动到了某个远程存储上。

  • 具有 Unpinned 属性的文件不会被一直保存在本地计算机。

相对应的,有个 Pinned 属性:

  • 具有 Pinned 属性的文件会一直在本地计算机上保留一份。

应用到 OneDrive 上,我们应该可以理解以下几点:

  • 在本地有存储(图标为浅绿色对勾)的文件不具有 OUP 中的任何属性;

  • 被 “释放空间”(图标为蓝色云)的文件具有 OU 属性;

  • “始终保留在此设备”(图标为深绿色对勾)上的文件具有 P 属性;

不太清楚这个问题是 Windows 11 的问题还是 OneDrive 的问题,总之希望帮助到遭遇到同样问题的人。