前言
电脑使用时间一长,C盘就会空间不够用,其中大部分都是AppData文件夹占用的,我们就可以迁移
我们可以使用WizTree这个软件来查看磁盘空间占用情况。
https://www.diskanalyzer.com/
注意
除非空间不够并且无法扩容影响使用,否则不建议处理。下面的两种方式都不太完美。
方式1
完全迁移Users文件夹
这种方式按理来说应该完全没问题,但是实际上出现了部分软件配置失效,WPS文档同步也出现了问题。
所以除非完全没空间了,不建议迁移。
开机情况下点击
更新和安全 => 恢复 => 高级启动
重启后点击高级选项
点击命令提示符
如果没有可以使用PE进行操作
PE中自带的cmd没有robocopy命令,可以使用C:\Windows\System32下的cmd.exe
输入命令
1 2 3 4 5 6 7 8
| robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ
ren "C:\Users" "Users2"
mklink /J "C:\Users" "D:\Users"
|
重启后可以删除Users2
注:如果重启不了,那么通过以下方式恢复
重启3次进入恢复命令行
1 2 3 4
| rmdir "C:\Users" /S /Q
ren "C:\Users2" "Users"
|
如果Users2删除了,恢复
1 2 3 4 5
| rmdir "C:\Users" /S /Q
robocopy "D:\Users" "C:\Users" /E /COPYALL /XJ
|
方式2(不推荐)
只更改AppData文件夹
这种方式会导致部分软件无法运行。
手动操作
进入注册表
处理的注册表位置
1 2
| HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
|
把其中和AppData相关的键值改为新位置即可。
这种方法并不能完全替换完。
AppData
1
| %USERPROFILE%\AppData\Roaming
|
代码操作
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| using System; using System.IO; using System.Windows;
using Microsoft.Win32;
namespace appdata_migration { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); PathOriginTb.Text = GetPathOrigin(); PathTb.Text = @"D:\AppData"; }
private static string GetPathOrigin() { return Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).Replace(@"\Roaming", ""); }
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(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", pathTbText); Deal(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", pathTbText); } } } }
|
页面
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| <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>
|