C 盘满了怎么办?BAT 一键清理 + 目录软链接就搞定

背景

使用 windows 电脑,C 盘空间不足是大部分人经常会遇到的一个问题。

问题出在哪里呢?

通过手动查看一些文件夹的“占用空间”后,发现 C:\Users\username\AppData 占用的空间一直在增加,因为电脑会安装一些新的软件(即使自定义安装到 D 盘)、下载新的文件。

起初,我的想法是定时清理删除垃圾、无效的文件,经过几次尝试发现,能直接删除的文件夹比较少,而且随着时间的增长,C 盘空间还是会越来越小。如果能将 D 盘空闲的空间分给 C 盘一些就好了。

当前,电脑已经使用很长一段时间,直接操作将 D 盘空间分给 C 盘一些,有些冒险、不够简单容易上手。如果单独配置各个软件的存储路径,也是非常复杂,是一项浩大工程,耗时耗力,而且以后容易忘记配置。

为了解决这个问题,目前暂时使用两个方法:

  • 使用 windows 中的 “软连接”,将应用软件数据转移到空间更大的 D 盘
  • bat 脚本定时清理 C 盘中的垃圾文件

强大的“软连接”

工具:Windows 的目录联接 (Junction) 功能。

以 JetBrains 软件为例,对所有旗下所有软件一次性生效,比如 JetBrains 目录下有 PyCharm2025.3、IntelliJIdea2024.2、GoLand 等等。

步骤一:

关闭所有 JetBrains 软件,将 C:\Users\username\AppData\Local\JetBrains 整个文件夹剪切到 D:\softwaredata\AppData\JetBrains

步骤二:

管理员身份打开 CMD,输入:

1
mklink /j "C:\Users\username\AppData\Local\JetBrains" "D:\softwaredata\AppData\JetBrains"

可以看到 C:\Users\username\AppData\Local\ 目录下的 JetBrains 是一个链接的图标,双击可以看到 D:\softwaredata\AppData\JetBrains 中的文件。

此时 C 盘的占用空间顿时小了很多。

同样的,对于其他占用空间大的目录,也可以做同样的操作。


脚本清理

清理以下内容:用户临时文件 (%temp%)、系统临时文件、Prefetch 预取文件、系统日志 (.log)、SoftwareDistribution、可能占用几GB回收站。

配置定时任务,使用 任务计划程序 是最简单的方式。

1、 打开任务计划程序

Win + R → 输入 taskschd.msc → 回车


2、创建任务

右侧点击 **”创建任务”**(不是”创建基本任务”,选项更完整)

常规 选项卡:

  • 名称:随便填,如 MyClearC
  • 勾选 “使用最高权限运行”
  • 配置:选 Windows 10 或对应系统版本

3、触发器(定时)

新建,按需选择:

  • 每周执行一次 → 选 每周,勾选某天,设置时间
  • 每月执行一次 → 选 每月

建议选一个电脑常开但自己不在用的时间,比如每周日凌晨 3:00。


4、操作

新建

  • 操作:启动程序
  • 程序或脚本:填脚本的完整路径,例如:
1
C:\Scripts\clean.bat

5、条件 & 设置(可选优化)

条件 选项卡:

  • 取消勾选 **”只在计算机使用交流电源时才启动此任务”**(笔记本用户建议保留)

设置 选项卡:

  • 勾选 “如果任务失败,按以下频率重新启动” → 1分钟,重试 3 次

6、保存

点确定,会提示输入当前账户密码,输入后即保存成功。

之后可以在任务列表里右键 → “运行” 手动触发一次,确认脚本能正常以管理员权限执行。

清理脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@echo off
title Windows 清理脚本
color 0A

:: 检查管理员权限
net session >nul 2>&1
if %errorlevel% neq 0 (
echo 请以管理员身份运行此脚本!
pause
exit /b
)

echo ============================================
echo 正在进行深度清理,请稍候...
echo ============================================

:: 1. 清理用户临时文件
echo 正在清理用户临时文件...
del /f /s /q "%temp%\*.*" >nul 2>&1
for /d %%i in ("%temp%\*") do rd /s /q "%%i" >nul 2>&1

:: 2. 清理系统临时文件(Temp 和 temp 是同一目录,只需清理一次)
echo 正在清理系统临时文件...
del /f /s /q "%systemroot%\Temp\*.*" >nul 2>&1
for /d %%i in ("%systemroot%\Temp\*") do rd /s /q "%%i" >nul 2>&1

:: 3. 清理预取文件
echo 正在清理预取文件...
del /f /s /q "%systemroot%\Prefetch\*.*" >nul 2>&1

:: 4. 清理系统日志文件
echo 正在清理系统日志...
del /f /s /q "%systemroot%\*.log" >nul 2>&1

:: 5. 停止 Windows 更新服务,清理下载缓存,并禁用服务
echo 正在处理 Windows 更新相关文件...
net stop wuauserv >nul 2>&1
net stop bits >nul 2>&1
del /f /s /q "%systemroot%\SoftwareDistribution\Download\*.*" >nul 2>&1
for /d %%i in ("%systemroot%\SoftwareDistribution\Download\*") do rd /s /q "%%i" >nul 2>&1
sc config wuauserv start= disabled >nul 2>&1
sc config bits start= disabled >nul 2>&1
echo Windows 更新服务已清理并设为禁用状态。

:: 6. 清理回收站(只删除内容,不删除目录本身)
echo 正在清空回收站...
for /d %%i in ("%systemdrive%\$Recycle.Bin\*") do rd /s /q "%%i" >nul 2>&1
del /f /s /q "%systemdrive%\$Recycle.Bin\*.*" >nul 2>&1

echo ============================================
echo 清理完成!
echo ============================================
pause