这个帖子里说的还是比较清楚的。 复制代码,保存到后缀为ps1的文件中,然后修改上面3个路径。
第一个为快捷方式文件所在的目录。 第二个为快捷方式文件所指向的原始目录,第三个为快捷方式文件所指向的新目录。
然后右键执行这个ps1文件即可。 预先备份好以免出错。
$shortcutFolder = "D:\111\新建文件夹\" # 指定快捷方式所在的文件夹路径
$oldStartPath = "D:\1\" # 指定旧的起始文件夹路径
$newStartPath = "D:\2023\" # 指定新的起始文件夹路径
Get-ChildItem -Path $shortcutFolder -Filter *.lnk -Recurse | ForEach-Object {
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($_.FullName)
if ($shortcut.TargetPath.StartsWith($oldStartPath)) {
$newTargetPath = $newStartPath + $shortcut.TargetPath.Remove(0, $oldStartPath.Length)
$shortcut.TargetPath = $newTargetPath
$shortcut.Save()
Write-Host "目标已更新:" $_.FullName
}
}
没有查到相关资料。 感觉这里可能是根据相对路径判断的,可以试试,在拷贝过程中lnk和目标文件相对位置变化一下,看看还能不能找到。
另外找到了一篇英文资料,https://www.winhelponline.com/blog/how-to-change-shortcut-lnk-targets-in-bulk-using-script/
里面介绍了一个 Shortcut Search And Replace 工具,也可以试一下看看。
查到了一个相关的帖子:
[How do I stop a Windows shortcut from updating its path? - Super User](https://superuser.com/questions/1231074/how-do-i-stop-a-windows-shortcut-from-updating-its-path)
Windows 有一个Distributed Link Tracking Client (TrkWks)服务来跟踪快捷方式目标的改变。
Distributed Link Tracking tracks links in scenarios where the link is made to a file on an NTFS volume, such as shell shortcuts. If that file is renamed, moved to another volume on the same computer, moved to another computer, or moved in other similar scenarios, Windows uses Distributed Link Tracking to find the file.