我一直在使用这个实用程序相对的因为我知道,所以可以更快地创建相对快捷方式。问题是我的驱动器上有很多旧的快捷方式,我想转换它们,而不必一个接一个地重新创建它们。是否有任何实用程序允许这样做?如果有一个解决方案需要我一个接一个地选择它们,那就没问题了。这还可以解决 Windows 的问题,它有时会破坏正常快捷方式中曾经编程的路径,然后要求您查找路径中的错误...
答案1
我想出了一个快速的 VBScript 来批量更改快捷方式目标。它调用Relative.exe
并覆盖现有的快捷方式,将目标更改为相对路径。
笔记:继续操作之前,请备份您的原始快捷方式。务必先使用示例文件进行测试。
(如果程序安装在其他位置,请更新脚本第 9 行中的 Relative.exe 路径。)
Option Explicit
If WScript.Arguments.Count = 0 Then WScript.Quit
Dim WshShell, WshShortcut, sAppPath, oFSO, sCmd
Dim sSrcFile, sTarget, sArgs, sWStyle, sHotkey, sSkipped, i
Set WshShell = CreateObject ("WScript.Shell")
Set oFSO = CreateObject ("Scripting.FileSystemObject")
sSkipped = "List of shortcuts skipped:" & vbCrLf & vbCrLf
sAppPath = """" & "C:\Program Files (x86)\Relative\Relative.exe" & """"
For i = 0 To WScript.Arguments.Count - 1
sSrcFile = WScript.Arguments(i)
If LCase(Right(sSrcFile, 4)) <> ".lnk" Then Exit For
'Get shortcut properties
Set WshShortcut = WshShell.CreateShortcut(sSrcFile)
sTarget = WshShortcut.TargetPath
sWStyle = WshShortcut.WindowStyle
sArgs = WshShortcut.Arguments
sHotkey = WshShortcut.Hotkey
'Skip if target has the .exe suffix, or the target is a File
If InStr(sTarget, ".exe") > 0 Or oFSO.FileExists (sTarget) Then
sTarget = ""
End If
'Skip if target is already in relative path format
If InStr(sTarget, ".\") = 0 And Trim(sTarget) <> "" Then
'Run Relative.exe and overwrite existing shortcut
sCmd = sAppPath & " " & sTarget & " " & """" & _
Replace(sSrcFile, ".lnk", "") & """"
WshShell.Run sCmd,1, 1
'Restore shortcut Hotkey and Window style setting
WScript.Sleep 500
Set WshShortcut = WshShell.CreateShortcut(sSrcFile)
WshShortcut.WindowStyle = sWStyle
If sHotkey <> "" Then WshShortcut.Hotkey = sHotkey
WshShortcut.Save
Else
sSkipped = sSkipped & sSrcFile & vbCrLf
End If
Next
If Len (sSkipped) > 32 Then WScript.Echo sSkipped
指示
- 将以上代码复制到记事本并保存为
ToRelative.vbs
。 - 打开您的
Sendto
文件夹(提示:shell:sendto
在“开始/运行”中运行。) - 将脚本的快捷方式放在 SendTo 文件夹中。
- 右键单击一组.lnk 文件,单击“发送到”,然后
ToRelative
在“发送到”菜单中选择。