前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >电脑上AppData数据迁移(解决C盘空间不足的问题)

电脑上AppData数据迁移(解决C盘空间不足的问题)

作者头像
码客说
发布2023-03-24 14:54:46
6.5K0
发布2023-03-24 14:54:46
举报
文章被收录于专栏:码客码客

前言

电脑使用时间一长,C盘就会空间不够用,其中大部分都是AppData文件夹占用的,我们就可以迁移

我们可以使用WizTree这个软件来查看磁盘空间占用情况。

https://www.diskanalyzer.com/

方式1(推荐)

完全迁移Users文件夹

开机情况下点击

更新和安全 => 恢复 => 高级启动

重启后点击高级选项

点击命令提示符

如果没有可以使用PE进行操作

PE中自带的cmd没有robocopy命令,可以使用C:\Windows\System32下的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_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

把其中和AppData相关的键值改为新位置即可。

这种方法并不能完全替换完。

AppData

代码语言:javascript
复制
%USERPROFILE%\AppData\Roaming

使用代码实现

代码语言: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:\Users\Administrator\AppData
        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(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", pathTbText);
                Deal(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User 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>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 方式1(推荐)
  • 方式2
    • 使用代码实现
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档