上篇介绍了《PowerShell统计Windows的文件夹大小 》,根据统计结果,我发现总共有几个文件占用比较夸张,具体如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
C:\ProgramData\

Kaspersky Lab 6890.59 MB
NVIDIA 4536.47 MB
NVIDIA Corporation 4189.88 MB
Microsoft 2385.78 MB
Lenovo 1654.15 MB
# 环境变量为 $env:APPDATA
C:\Users\用户\AppData\Roaming
Notion 19016.78 MB
Tencent 7532.22 MB
JetBrains 3691.49 MB
npm-cache 1899.45 MB

# 环境变量为$env:LOCALAPPDATA
C:\Users\用户\AppData\Local
Microsoft 6967.01 MB
NVIDIA 5484.8 MB
JetBrains 3243.41 MB
Temp 2379.17 MB
Programs 1812.47 MB
Lenovo 1506.49 MB
Google 1231.54 MB
Packages 962.48 MB
1
2
$env:LOCALAPPDATA 对应 C:\Users\用户\AppData\Local  
$env:APPDATA 对应 C:\Users\用户\AppData\Roaming

从上面的统计可以看到,NVIDIA占用真的多啊,此时需要寄出老祖经典名场面

大概看了下,Notion是因为里面的C:\Users\用户\AppData\Roaming\Notion\Partitions占用了18G,直接将其删除掉,保险起见使用如下命令:

1
2
3
4
5
# 停止进程
Stop-Process -Name "Notion" -ErrorAction SilentlyContinue

# 删除目录
Remove-Item -Path "$env:APPDATA\Notion\Partitions" -Recurse -Force

Notion 使用了类似浏览器的索引技术(IndexedDB),当你浏览含有大量图片、视频或嵌入内容的页面时,Notion 会将这些资源缓存在本地以提高加载速度。
多账号切换: 如果你在客户端登录了多个账号,每个账号都会生成独立的缓存。
重型页面: 频繁查看带有大量附件的数据库会迅速填满该目录。

为了避免后期缓存太多导致占用C盘,将其剪切到其他盘,例如E:\AppData\Notion,然后创建软连接到这里

1
New-Item -ItemType Junction -Path "$env:APPDATA\Notion" -Target "E:\AppData\Notion"

同样的方式可以将JetBrains也如此操作:

1
2
3
New-Item -ItemType Junction -Path "$env:LOCALAPPDATA\JetBrains" -Target "E:\AppData\JetBrains\Local"

New-Item -ItemType Junction -Path "$env:LOCALAPPDATA\JetBrains" -Target "E:\AppData\JetBrains\Roaming"

如果你是用的是CMD,也可以使用如下命令,效果是相同的,但更推荐使用PowerShell:

1
mklink /j "C:\Users\用户\AppData\Local\JetBrains" "E:\AppData\JetBrains\Local"

设置完成后确认下是否有误

1
Get-Item "$env:APPDATA\Notion"  Select-Object Mode, LinkType, Target

输出如下:

1
2
3
Mode  LinkType Target
---- -------- ------
l---- Junction E:\AppData\Notion

这样就再也不用担心C盘被塞满了。当然,Nvidia也可以这么操作,但是通常不建议这么干。

最佳方案就是笔记本系统盘使用1T的SSD,另一个插槽买个2T SSD,为了方便管理可以将2T的分为D盘和E盘。

关于PowerShell的目录链接和符号链接,大致区别如下:

特性

Junction (目录联接)

Symbolic Link (符号链接)

创建命令

New-Item -ItemType Junction

New-Item -ItemType SymboliLink

支持对象

仅限目录(文件夹)

目录 + 文件

跨盘符支持

支持(从 C 搬到 D)

支持

远程路径

不支持(必须是本地硬盘)

支持(可以链接到局域网共享目录)

路径类型

使用绝对路径

支持相对路径

移动目标后

立即失效

立即失效

Junction (目录联接) —— “分身术”

Junction 是 NTFS 文件系统的一种硬性重定向。当你访问 C:\Users\用户\AppData\Local\JetBrains 时,文件系统内核会直接将其重定向到 D:\JetBrains_Data\Local

  • 特点:对于软件来说,它完全意识不到自己在 D 盘工作。它的兼容性最高,非常适合用来搬移 AppData 下的软件缓存。
  • 历史:从 Windows 2000 开始就存在,非常稳定。

它更像是一个特殊的“文件”,里面记录了目标的路径信息。

  • 特点:它可以指向文件(比如把一个巨大的游戏资源文件 .pak 链到别处)。
  • 缺点:创建符号链接通常需要管理员权限(除非开启了 Windows 开发人员模式)。有些旧软件可能不识别符号链接。