前言
电脑使用时间一长,C盘就会空间不够用,其中大部分都是AppData文件夹占用的,我们就可以迁移
我们可以使用WizTree这个软件来查看磁盘空间占用情况。
https://www.diskanalyzer.com/
方式1(推荐)
完全迁移Users文件夹
开机情况下点击
更新和安全 => 恢复 => 高级启动
重启后点击高级选项
点击命令提示符
如果没有可以使用PE进行操作
PE中自带的cmd没有
robocopy
命令,可以使用C:WindowsSystem32
下的cmd.exe
输入命令
代码语言:javascript复制# 将USer复制到自己的其它盘我是D盘
robocopy "C:Users" "D:Users" /E /COPYALL /XJ
# 复制完成之后将原有文件重命名
ren "C:Users" "Users2"
# 建立软连接
mklink /J "C:Users" "D:Users"
重启后可以删除Users2
代码语言:javascript复制rd /s /q C:Users2
注:如果重启不了,那么通过以下方式恢复
重启3次进入恢复命令行
代码语言:javascript复制# 删除软连接
rmdir "C:Users" /S /Q
# 将之前重命名的文件夹变回员User
ren "C:Users2" "Users"
方式2
只更改AppData文件夹
这种方式会导致部分软件无法运行。
进入注册表
代码语言:javascript复制regedit.exe
处理的注册表位置
代码语言:javascript复制HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Folders
HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerUser Shell Folders
把其中和AppData
相关的键值改为新位置即可。
这种方法并不能完全替换完。
AppData
代码语言:javascript复制%USERPROFILE%AppDataRoaming
使用代码实现
代码语言:javascript复制using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;
namespace appdata_migration
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
PathOriginTb.Text = GetPathOrigin();
PathTb.Text = @"D:AppData";
}
//C:UsersAdministratorAppData
private static string GetPathOrigin()
{
return Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).Replace(@"Roaming", "");
}
/// <summary>
/// 修改注册表
/// </summary>
/// <param name="pPath"></param>
/// <param name="pathNew"></param>
private void Deal(string pPath, string pathNew)
{
var mreg = Registry.CurrentUser;
mreg = mreg.OpenSubKey(pPath, true);
if (mreg == null) return;
var valueNames = mreg.GetValueNames();
foreach (var valueName in valueNames)
{
var value = mreg.GetValue(valueName).ToString();
if (!value.Contains("AppData")) continue;
var preStr = value.Substring(0,
value.IndexOf("AppData", StringComparison.Ordinal) "AppData".Length
);
var newStr = value.Replace(preStr, pathNew);
Console.WriteLine(valueName);
Console.WriteLine(newStr);
mreg.SetValue(valueName, newStr);
}
}
private void DealClick(object sender, RoutedEventArgs e)
{
var pathTbText = PathTb.Text;
if (!Directory.Exists(pathTbText))
{
MessageBox.Show("文件夹不存在");
}
else
{
Deal(@"SOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Folders", pathTbText);
Deal(@"SOFTWAREMicrosoftWindowsCurrentVersionExplorerUser Shell Folders", pathTbText);
}
}
}
}
页面
代码语言:javascript复制<Window
x:Class="appdata_migration.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:appdata_migration"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="AppData迁移"
Width="420"
Height="160"
mc:Ignorable="d">
<Grid>
<Grid Margin="10,10,10,10" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="10" />
<RowDefinition Height="30" />
<RowDefinition Height="10" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<TextBlock
Grid.Row="0"
Grid.Column="0"
VerticalAlignment="Center"
FontSize="16"
Text="源路径" />
<TextBox
Name="PathOriginTb"
Grid.Row="0"
Grid.Column="1"
Grid.ColumnSpan="2"
Margin="10,0,0,0"
VerticalContentAlignment="Center" />
<TextBlock
Grid.Row="2"
Grid.Column="0"
VerticalAlignment="Center"
FontSize="16"
Text="新路径" />
<TextBox
Name="PathTb"
Grid.Row="2"
Grid.Column="1"
Margin="10,0,0,0"
VerticalContentAlignment="Center" />
<Button
Grid.Row="2"
Grid.Column="2"
Margin="10,0,0,0"
Background="DodgerBlue"
BorderThickness="0"
Click="DealClick"
Cursor="Hand"
FontSize="16"
Foreground="White">
开始处理
</Button>
<TextBlock
Name="ResultTb"
Grid.Row="4"
Grid.Column="0"
Grid.ColumnSpan="3"
HorizontalAlignment="Center"
FontSize="14"
Foreground="#666666"
Text="请手都复制AppData文件后再执行"
TextWrapping="Wrap" />
</Grid>
</Grid>
</Window>