迁移AppData
AppData 文件夹位于 C 盘路径:C:\Users\用户名\AppData,也可以在路径栏用 %LOCALAPPDATA% 快速打开该路径,该路径下包含 Local、LocalLow、Roaming 等三个文件夹,如下图,这三个文件夹中的大部分文件都是需要迁移的。
有不少文章都用修改注册表的方式来迁移 AppData 文件夹,这种做法会将 AppData 整个文件夹迁移到其他路径,这种做法会导致部分程序无法正常运行,因此本文不采用修改注册表的方式迁移 AppData 文件夹。
Windows 中有一个命令为 mklink,它可以将特定路径链接到另一个路径,简单的说就是为文件夹建立了一个传送门机制(比如说将文件夹 A 链接到文件夹 B,当你进入文件 A 时,虽然路径显示的是 A 的路径,但实际上你是在 B 的路径下,你做的任何修改都是在 B 的路径下发生的)。mklink 命令的用法如下:
mklink [[/d] | [/h] | [/j]] Link Target
/d 创建目录符号链接。默认为文件符号链接。
/h 创建硬链接而非符号链接。
/j 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(相对或绝对)。
使用 mklink 命令建立链接的方法的最大优点就是灵活性,可以对不同的文件夹作不同的处理(比如放到不同的位置,例如放到程序本身的安装路径下,不过本文都是迁移到同一路径下);另外当有重装系统的需求时,可以放心对 C 盘直接进行格盘重装,重装后只需要重新建立链接即可快速恢复到重装系统前的状态,能够节省大量时间。
请注意同样不建议直接用 mklink 迁移整个 AppData 文件夹,这种做法同样很容易产生问题。本文推荐的做法是将 Local、LocalLow、Roaming 三个文件夹中的非系统产生的文件夹使用 mklink 命令链接到其他路径下。具体的步骤为:
将这三个文件夹中的子文件夹整个移动到其他路径(随意,但不要放在某个盘的根目录)
用 mklink 命令(使用 /d 选项)将原来的文件夹路径链接到移动后的路径
这里需要说明,如果在第一步中,没有将整个子文件夹都移动走,只是将子文件夹里面的内容移动走,那么在第二步链接时会提示路径已存在的错误。
第一步:迁移目录
第二部建立 软链接
了解了,如果你需要递归地处理所有层次的目录,并为每个文件创建符号链接,可以使用os.walk
来遍历所有子目录和文件。以下是修改后的Python脚本:
Python复制
import os
import subprocess
# 定义源目录和目标目录
source_dir = r'K:\Tencent'
target_dir = r'C:\Users\Administrator\AppData\Roaming\Tencent'
# 确保目标目录存在
if not os.path.exists(target_dir):
os.makedirs(target_dir)
# 递归遍历源目录下的所有文件和子目录
for root, dirs, files in os.walk(source_dir):
# 计算当前目录相对于源目录的相对路径
relative_path = os.path.relpath(root, source_dir)
target_subdir = os.path.join(target_dir, relative_path)
# 确保目标子目录存在
if not os.path.exists(target_subdir):
os.makedirs(target_subdir)
# 为每个文件创建符号链接
for filename in files:
source_path = os.path.join(root, filename)
target_path = os.path.join(target_subdir, filename)
# 使用mklink命令创建符号链接
subprocess.run(['mklink', target_path, source_path], shell=True)
print("Links created successfully.")
使用方法
-
将上述脚本内容保存到一个Python文件中,文件名为
create_links.py
。 -
打开命令提示符(CMD)或PowerShell。
-
导航到保存脚本的目录:
bash复制
cd path\to\your\script
-
运行脚本:
bash复制
python create_links.py
说明
-
os.walk(source_dir)
:递归遍历源目录下的所有子目录和文件。 -
os.path.relpath(root, source_dir)
:计算当前目录相对于源目录的相对路径。 -
os.path.join(target_dir, relative_path)
:构建目标子目录的路径。 -
os.makedirs(target_subdir)
:确保目标子目录存在。 -
subprocess.run(['mklink', target_path, source_path], shell=True)
:使用mklink
命令创建符号链接。
注意事项
-
确保你有足够的权限来创建符号链接。在某些情况下,可能需要以管理员身份运行命令提示符或PowerShell。
-
如果目标目录已经存在同名文件或链接,
mklink
命令会失败。你可以添加额外的逻辑来处理这种情况,例如删除现有的链接或文件。
希望这个脚本能够满足你的需求!
迁移AppData
AppData 文件夹位于 C 盘路径:C:\Users\用户名\AppData,也可以在路径栏用 %LOCALAPPDATA% 快速打开该路径,该路径下包含 Local、LocalLow、Roaming 等三个文件夹,如下图,这三个文件夹中的大部分文件都是需要迁移的。
有不少文章都用修改注册表的方式来迁移 AppData 文件夹,这种做法会将 AppData 整个文件夹迁移到其他路径,这种做法会导致部分程序无法正常运行,因此本文不采用修改注册表的方式迁移 AppData 文件夹。
Windows 中有一个命令为 mklink,它可以将特定路径链接到另一个路径,简单的说就是为文件夹建立了一个传送门机制(比如说将文件夹 A 链接到文件夹 B,当你进入文件 A 时,虽然路径显示的是 A 的路径,但实际上你是在 B 的路径下,你做的任何修改都是在 B 的路径下发生的)。mklink 命令的用法如下:
mklink [[/d] | [/h] | [/j]] Link Target
/d 创建目录符号链接。默认为文件符号链接。
/h 创建硬链接而非符号链接。
/j 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(相对或绝对)。
使用 mklink 命令建立链接的方法的最大优点就是灵活性,可以对不同的文件夹作不同的处理(比如放到不同的位置,例如放到程序本身的安装路径下,不过本文都是迁移到同一路径下);另外当有重装系统的需求时,可以放心对 C 盘直接进行格盘重装,重装后只需要重新建立链接即可快速恢复到重装系统前的状态,能够节省大量时间。
请注意同样不建议直接用 mklink 迁移整个 AppData 文件夹,这种做法同样很容易产生问题。本文推荐的做法是将 Local、LocalLow、Roaming 三个文件夹中的非系统产生的文件夹使用 mklink 命令链接到其他路径下。具体的步骤为:
将这三个文件夹中的子文件夹整个移动到其他路径(随意,但不要放在某个盘的根目录)
用 mklink 命令(使用 /d 选项)将原来的文件夹路径链接到移动后的路径
这里需要说明,如果在第一步中,没有将整个子文件夹都移动走,只是将子文件夹里面的内容移动走,那么在第二步链接时会提示路径已存在的错误。
第一步:迁移目录
第二部建立 软链接
了解了,如果你需要递归地处理所有层次的目录,并为每个文件创建符号链接,可以使用os.walk
来遍历所有子目录和文件。以下是修改后的Python脚本:
Python复制
import os
import subprocess
# 定义源目录和目标目录
source_dir = r'K:\Tencent'
target_dir = r'C:\Users\Administrator\AppData\Roaming\Tencent'
# 确保目标目录存在
if not os.path.exists(target_dir):
os.makedirs(target_dir)
# 递归遍历源目录下的所有文件和子目录
for root, dirs, files in os.walk(source_dir):
# 计算当前目录相对于源目录的相对路径
relative_path = os.path.relpath(root, source_dir)
target_subdir = os.path.join(target_dir, relative_path)
# 确保目标子目录存在
if not os.path.exists(target_subdir):
os.makedirs(target_subdir)
# 为每个文件创建符号链接
for filename in files:
source_path = os.path.join(root, filename)
target_path = os.path.join(target_subdir, filename)
# 使用mklink命令创建符号链接
subprocess.run(['mklink', target_path, source_path], shell=True)
print("Links created successfully.")
使用方法
-
将上述脚本内容保存到一个Python文件中,文件名为
create_links.py
。 -
打开命令提示符(CMD)或PowerShell。
-
导航到保存脚本的目录:
bash复制
cd path\to\your\script
-
运行脚本:
bash复制
python create_links.py
说明
-
os.walk(source_dir)
:递归遍历源目录下的所有子目录和文件。 -
os.path.relpath(root, source_dir)
:计算当前目录相对于源目录的相对路径。 -
os.path.join(target_dir, relative_path)
:构建目标子目录的路径。 -
os.makedirs(target_subdir)
:确保目标子目录存在。 -
subprocess.run(['mklink', target_path, source_path], shell=True)
:使用mklink
命令创建符号链接。
注意事项
-
确保你有足够的权限来创建符号链接。在某些情况下,可能需要以管理员身份运行命令提示符或PowerShell。
-
如果目标目录已经存在同名文件或链接,
mklink
命令会失败。你可以添加额外的逻辑来处理这种情况,例如删除现有的链接或文件。
希望这个脚本能够满足你的需求!