「备忘」使用符号链接映射软件配置文件夹

吐槽/反馈/建议:我的咸鱼心  爱发电-@wdssmq

一些软件会把配置文件放在 %USERPROFILE%\AppData\Local%USERPROFILE%\AppData\Roaming,其中一些需要备份一下在重装系统后恢复。。

另:%AppData% 变量等同于 %USERPROFILE%\AppData\Roaming,而 %LocalAppData% 变量等同于 %USERPROFILE%\AppData\Local。。。

下边是我使用的方案:

  • 1、在 C:\config 下存放真实的配置文件,C:\config\RoamingC:\config\Local 分别对应 %USERPROFILE%\AppData\Roaming%USERPROFILE%\AppData\Local
  • 2、并不是所有配置都需要备份,所以只映射需要的文件夹,比如 C:\config\Local\EverythingC:\config\Roaming\Everything
  • 3、重装系统前备份整个 C 盘到外置硬盘,重装系统后恢复 C:\config,再映射相应的文件夹;

再下边是自动化的 PowerShell 脚本:

  • 1、保存脚本至 C:\config\config.ps1,按需调整 $directoryList
  • 2、在相应的软件安装前执行,「右键」→「使用 PowerShell 运行」,需要允许管理员权限;
  • 3、首次运行会自动创建 C:\config\RoamingC:\config\Local 及内部的空文件夹,然后创建符号链接;
  • 4、如果软件已经安装,会提示:The path $dir\$name is not a symbolic link.,可以剪切合并C:\config 内相应文件夹,之后再次运行脚本;
  • 5、恢复时只需将 C:\config 复制到新系统,再次运行脚本,同样应在软件安装前执行;

注:如果遇到「禁止运行脚本」,使用 set-executionpolicy remotesigned 修改执行策略;

Set-Location "C:\config"

# 用于创建目录,两个参数,dir 和 name,判断 dir/name 是否存在,不存在则创建
function CreateDirectory($dir, $name) {
    # $pwd = Get-Location
    if (!(Test-Path "$dir\$name")) {
        # 直接创建目录
        New-Item -ItemType Directory -Path "$dir\$name"
    }
    else {
        Write-Output "The path $pwd\$dir\$name already exists"
    }
    # 输出换行
    Write-Output ""
}

# 用于创建符号链接到 $env:AppData 或 $env:LocalAppData
function CreateSymbolicLink($dir, $name) {
    $srcDir = "$pwd\$dir\$name"
    # $dir 判断 Roaming 或 Local,替换成 $env:AppData 或 $env:LocalAppData
    if ($dir -eq "Roaming") {
        $dir = $env:AppData
    }
    elseif ($dir -eq "Local") {
        $dir = $env:LocalAppData
    }
    if (!(Test-Path "$dir\$name")) {
        # 创建符号链接
        cmd /c mklink /d "$dir\$name" $srcDir
    }
    else {
        $item = Get-Item "$dir\$name"
        if ($item.Attributes -band [System.IO.FileAttributes]::ReparsePoint) {
            Write-Host "The path $dir\$name is a symbolic link."
        }
        else {
            Write-Output "+++++++++++++++++++++++++++++"
            Write-Host "The path $dir\$name is not a symbolic link."
            Write-Output "+++++++++++++++++++++++++++++"
        }
        # Write-Output "$dir\$name already exists"
    }
    # 输出换行
    Write-Output ""
}

# 判断管理员权限
If (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")) {
    Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" $PSCommandArgs" -Verb RunAs
    Exit
}

# 获取需要创建的目录的列表
$directoryList = @("Everything", "qBittorrent", "Resilio Sync", "Resilio Sync Service")

# 循环遍历目录列表,检查目录是否存在,不存在则创建
foreach ($directory in $directoryList) {
    CreateDirectory "Roaming" $directory
    CreateSymbolicLink "Roaming" $directory
    CreateDirectory "Local" $directory
    CreateSymbolicLink "Local" $directory
    Write-Output "------------------------"
    Write-Output ""
}

# 输入任意键关闭窗口
Read-Host -Prompt "Press any key to continue..."


爱发电

本文标题:《「备忘」使用符号链接映射软件配置文件夹》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20220826264.html
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

相关文章

小羿 小羿 发布于 2011-01-10 18:34:18  
#cmt3002
很有意思哈!
给我个I7足以
回复
阿杰 阿杰 发布于 2011-01-09 21:41:25  
#cmt3001
很喜欢广告,尤其是很有创意的那种
回复
Suitear Suitear 发布于 2011-01-09 13:41:51  
#cmt3000
喜欢这家广告公司~
回复
发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

网站分类

  • 订阅本站的 RSS 2.0 新闻聚合

搜索

本周旧文

nuc 四个口插硬盘都识别不到,有亮灯。。最后试出别插到底。。

绿联的硬盘盒。。另外一个联想的没问题。。

近期观影记录:超级马里奥,死侍与金刚狼。。

搬家也告一段落,虽然搬过来的东西还得归置,新衣柜虽说已经散俩月味儿了,但还是不想放衣服进去。

要不我每年汇总整理一次??碎雨集_沉冰浮水_第1页

所以,不带这条的话,2024 年目前只发了 13 条嘟????

VSCode 内 git 操作卡住的时候没办法主动取消一直是个痛点,一般都是推送或拉取,今天连提交都卡了。。

又一个夏天过去了,所以今年也没买防水鞋套;然后天凉了,为了应对踢被子买了睡袋,不知道 1.2 米会不会略窄。。

《五至七时的克莱奥》,2018 年 6 月加入列表,21 年 11 月底发现 B 站上线了这部,直到前几天才看完,还是分两次看的。。接下来有五项是 2019 年的,都是电影 —— 略长的待办列表。。

有用程序自动抓取自己带 tag 的嘟,然后按年备份后从线上删除;刚发现去年的数据有备份但是没删线上??和本地数据对比后发现线上的还少一条,Why??

本质上,每个人需要的是「让自己面临的问题得到解决」的能力。。

这又涉及到直接能力和间接能力,,缺乏直接能力很正常,视情况可以通过学习来掌握直接能力,或者「请」有直接能力的人来帮自己解决。。

缺乏间接能力的情况是真没救,尤其是对「这是**我自己**面临的问题」这一前提没有明确认知的人。。

爱发电支持者

最新留言

友情链接