C盘空间清理方法 - 软链接迁移指南
通过将用户目录下的大型缓存目录迁移到其他盘(如D盘),可以有效释放C盘空间。
原理
Windows 支持两种目录链接方式:
- Junction (目录连接) - 兼容性好,支持跨分区
- Symbolic Link (符号链接) - 更灵活,需要管理员权限
本方案使用软链接将缓存目录从 C 盘指向 D 盘,应用程序仍按原路径访问,实际数据存储在 D 盘。
迁移步骤
1. 用户主目录下的目录
以下目录从 C:\Users\Administrator 迁移到 D:\Users\Administrator:
| 目录 | 说明 |
|---|---|
.android |
Android SDK 缓存 |
.bito |
Bito AI 工具缓存 |
.cache |
通用缓存目录 |
.cargo |
Rust Cargo 包缓存 |
.gradle |
Gradle 构建缓存 |
.m2 |
Maven 本地仓库 |
.npm |
npm 全局缓存 |
.bun |
bun 全局缓存 |
.rustup |
Rust 工具链 |
迁移命令:
batch
:: 创建 D 盘目标目录结构
mkdir D:\Users\Administrator
:: 1. .android 目录
## 使用powershell执行:
move C:\Users\Administrator\.android D:\Users\Administrator\.android
## 使用cmd执行
mklink /J C:\Users\Administrator\.android D:\Users\Administrator\.android
:: 2. .bito 目录
move C:\Users\Administrator\.bito D:\Users\Administrator\.bito
mklink /J C:\Users\Administrator\.bito D:\Users\Administrator\.bito
:: 3. .cache 目录
move C:\Users\Administrator\.cache D:\Users\Administrator\.cache
mklink /D C:\Users\Administrator\.cache D:\Users\Administrator\.cache
:: 4. .cargo 目录
move C:\Users\Administrator\.cargo D:\Users\Administrator\.cargo
mklink /D C:\Users\Administrator\.cargo D:\Users\Administrator\.cargo
:: 5. .gradle 目录
move C:\Users\Administrator\.gradle D:\Users\Administrator\.gradle
mklink /J C:\Users\Administrator\.gradle D:\Users\Administrator\.gradle
:: 6. .m2 目录
move C:\Users\Administrator\.m2 D:\Users\Administrator\.m2
mklink /D C:\Users\Administrator\.m2 D:\Users\Administrator\.m2
:: 7. .npm 目录
move C:\Users\Administrator\.npm D:\Users\Administrator\.npm
mklink /D C:\Users\Administrator\.npm D:\Users\Administrator\.npm
:: 8. .bun 目录
move C:\Users\Administrator\.bun D:\Users\Administrator\.bun
mklink /D C:\Users\Administrator\.bun D:\Users\Administrator\.bun
:: 9. .rustup 目录
move C:\Users\Administrator\.rustup D:\Users\Administrator\.rustup
mklink /D C:\Users\Administrator\.rustup D:\Users\Administrator\.rustup
2. AppData\Local 目录下的目录
以下目录从 C:\Users\Administrator\AppData\Local 迁移到 D:\Users\Administrator\AppData\Local:
| 目录 | 说明 |
|---|---|
Yarn |
Yarn 包管理器缓存 |
npm-cache |
npm 缓存目录 |
pnpm-cache |
pnpm 缓存目录 |
迁移命令:
batch
:: 创建 D 盘目标目录结构
mkdir D:\Users\Administrator\AppData\Local
:: 1. Yarn 目录
move C:\Users\Administrator\AppData\Local\Yarn D:\Users\Administrator\AppData\Local\Yarn
mklink /D C:\Users\Administrator\AppData\Local\Yarn D:\Users\Administrator\AppData\Local\Yarn
:: 2. npm-cache 目录
move C:\Users\Administrator\AppData\Local\npm-cache D:\Users\Administrator\AppData\Local\npm-cache
mklink /D C:\Users\Administrator\AppData\Local\npm-cache D:\Users\Administrator\AppData\Local\npm-cache
:: 3. pnpm-cache 目录
move C:\Users\Administrator\AppData\Local\pnpm-cache D:\Users\Administrator\AppData\Local\pnpm-cache
mklink /D C:\Users\Administrator\AppData\Local\pnpm-cache D:\Users\Administrator\AppData\Local\pnpm-cache
一键迁移脚本
powershell脚本: Clean-C-Drive.bat
bash
@echo off
:: Clean-C-Drive.bat - 支持在 CMD 和 PowerShell 中运行
:: 管理员权限检查
net session >nul 2>&1
if %errorLevel% neq 0 (
echo 需要管理员权限!
echo 请右键此脚本,选择"以管理员身份运行"
pause
exit /b 1
)
set targetDrive=D
set targetBase=%targetDrive%:\Users\Administrator
echo 创建目标目录结构...
if not exist "%targetBase%" mkdir "%targetBase%"
if not exist "%targetBase%\AppData" mkdir "%targetBase%\AppData"
if not exist "%targetBase%\AppData\Local" mkdir "%targetBase%\AppData\Local"
echo.
echo ========================================
echo 开始迁移缓存目录...
echo ========================================
:: 用户主目录下的目录
echo 迁移用户主目录...
if exist "%USERPROFILE%\.android" (
move "%USERPROFILE%\.android" "%targetBase%\.android" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.android' -Target '%targetBase%\.android' -Force" >nul 2>&1
)
echo [DONE] .android
)
if exist "%USERPROFILE%\.bito" (
move "%USERPROFILE%\.bito" "%targetBase%\.bito" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.bito' -Target '%targetBase%\.bito' -Force" >nul 2>&1
)
echo [DONE] .bito
)
if exist "%USERPROFILE%\.cache" (
move "%USERPROFILE%\.cache" "%targetBase%\.cache" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.cache' -Target '%targetBase%\.cache' -Force" >nul 2>&1
)
echo [DONE] .cache
)
if exist "%USERPROFILE%\.cargo" (
move "%USERPROFILE%%.cargo" "%targetBase%\.cargo" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.cargo' -Target '%targetBase%\.cargo' -Force" >nul 2>&1
)
echo [DONE] .cargo
)
if exist "%USERPROFILE%\.gradle" (
move "%USERPROFILE%\.gradle" "%targetBase%\.gradle" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.gradle' -Target '%targetBase%\.gradle' -Force" >nul 2>&1
)
echo [DONE] .gradle
)
if exist "%USERPROFILE%\.m2" (
move "%USERPROFILE%\.m2" "%targetBase%\.m2" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.m2' -Target '%targetBase%\.m2' -Force" >nul 2>&1
)
echo [DONE] .m2
)
if exist "%USERPROFILE%\.npm" (
move "%USERPROFILE%\.npm" "%targetBase%\.npm" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.npm' -Target '%targetBase%\.npm' -Force" >nul 2>&1
)
echo [DONE] .npm
)
if exist "%USERPROFILE%\.bun" (
move "%USERPROFILE%\.bun" "%targetBase%\.bun" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.bun' -Target '%targetBase%\.bun' -Force" >nul 2>&1
)
echo [DONE] .bun
)
if exist "%USERPROFILE%\.rustup" (
move "%USERPROFILE%\.rustup" "%targetBase%\.rustup" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%USERPROFILE%\.rustup' -Target '%targetBase%\.rustup' -Force" >nul 2>&1
)
echo [DONE] .rustup
)
echo.
echo 迁移AppData\Local目录...
if exist "%LOCALAPPDATA%\Yarn" (
move "%LOCALAPPDATA%\Yarn" "%targetBase%\AppData\Local\Yarn" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%LOCALAPPDATA%\Yarn' -Target '%targetBase%\AppData\Local\Yarn' -Force" >nul 2>&1
)
echo [DONE] Yarn
)
if exist "%LOCALAPPDATA%\npm-cache" (
move "%LOCALAPPDATA%\npm-cache" "%targetBase%\AppData\Local\npm-cache" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%LOCALAPPDATA%\npm-cache' -Target '%targetBase%\AppData\Local\npm-cache' -Force" >nul 2>&1
)
echo [DONE] npm-cache
)
if exist "%LOCALAPPDATA%\pnpm-cache" (
move "%LOCALAPPDATA%\pnpm-cache" "%targetBase%\AppData\Local\pnpm-cache" >nul 2>&1
if %errorLevel% equ 0 (
powershell -Command "New-Item -ItemType SymbolicLink -Path '%LOCALAPPDATA%\pnpm-cache' -Target '%targetBase%\AppData\Local\pnpm-cache' -Force" >nul 2>&1
)
echo [DONE] pnpm-cache
)
echo.
echo ========================================
echo 迁移完成!C盘空间已释放
echo ========================================
pause