全部
我正在尝试将AppData\Local
、AppData\Roaming
和移动AppData\LocalLow
到我的 D: 驱动器。
我知道微软的这种做法是不明智的,但如果开发人员愿意不将所有数据存储在这些目录中,那我就可以放心了。无论如何,我在那里存储了数 GB 的数据,而我的 C: 驱动器只应该用于存放我的操作系统。
我创建了一个新的管理员用户,将每个文件夹的所有内容复制到另一个驱动器上的相应文件夹中。然后我使用命令mklink /j C:\Users\my-user\AppData\<folder> D:\Users\my-user\AppData\<folder>
分别为每个文件夹创建一个连接点(因为我似乎无法完成整个 AppData 目录。LocalLow
似乎Roaming
每个都做得很好。但我似乎无法移动,Local
否则会完全弄乱我的任务栏/开始菜单(例如,它不会打开开始菜单、搜索菜单、cortona。我无法右键单击图标查看选项,无法打开通知栏、音量菜单或网络菜单。奇怪的是,我可以打开进程菜单,所以就是这样)。
我找到了一个 ps 命令来安装开始菜单主机和 cortana,但似乎找不到运行任务栏的所有其他必要程序,而且我担心如果我找到它们,我将永远缺少其中一个。
复制本地文件夹后,每个开始菜单和 cortona 文件夹中似乎都缺少文件......所以我认为这就是它不工作的原因。
我将尝试更直接的递归复制并对其进行差异化,以确保没有文件丢失。如果成功,请返回这里。与此同时,是否还有其他可能出错的地方?权限?有没有我不知道的更好的方法?
答案1
什么问题?
因此,我在 powershell 中执行时发现了错误Copy-Item -Recurse -Force
。此复制调用将连接点复制为空文件夹(没有意识到它们是连接点)。您可能可以创建一个连接到原始连接点的任何地方的连接点,并将其放在Local
另一个驱动器上的文件夹中,我毫不怀疑这会起作用,但这似乎也需要大量额外的易失性工作。您也无法创建符号链接或到另一个连接点的连接点……因此该修复不在考虑范围内。此外,复制项不会保留文件属性(如隐藏文件夹),这并不可怕,因为路径没有改变,但这只是另一个文件差异。也许robocopy
会做我想做的事……但在这一点上……我认为这不值得。
另外:我还学习了一些 powershell 命令,这些命令对于递归比较文件和查找这些模糊之处非常有用,所以它们在这里。
$ref = Get-ChildItem -Recurse -path ref_path
$dest = Get-ChildItem -Recurse -path dest_path
Compare-Object -ReferenceObject $ref -DifferenceObject $dest
=>
意味着它在ref
而不是dest
,<=
意味着它在dest
而不是ref
虽然这个问题与权限无关,但我同意@Daniel B 对我的原始帖子的评论。我可能不应该乱动这些文件夹,你也不应该。
我的解决方案
我将提出一个我保证会使用的解决方案...当安装程序为您提供不使用用户 AppData 文件夹的选项时,请选择该选项。对于那些不这样做的程序,我会留意我的 AppData 文件夹的大小。当我看到来自我安装的程序的文件夹时,我会将其移动到该驱动器并在它之前存在的位置创建一个连接点。这应该是相对安全的(至少不会损坏您的 PC)。
给开发者的提示是,不要将 AppData 用于整个应用的存储。这很烦人。