中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]怎样修改快捷方式的路径
作者:
标题: [求助]怎样修改快捷方式的路径 上一主题 | 下一主题
cad55
高级用户





积分 620
发帖 329
注册 2007-12-5
状态 离线
『楼 主』:  [求助]怎样修改快捷方式的路径

想通过一个BAT,,批量修改当前文件夹下,,,所有快捷方式的路径,,如下:


原快捷方式指引的路径:

1、D:\应用软件\cad2004\acad.exe
2、D:\应用软件\asd\a.exe
。。。。。

通过BAT将其路径改为:

1、E:\应用\cad2004\acad.exe
2、E:\应用\asd\a.exe
。。。。。

(也就是盘符或前面的文件夹路径可以会变,而最后的EXE名称不变)


请各位,,高手,,高人,,指点指点。。。

谢谢

2009-10-17 08:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 2 楼』:  

LNK 快界方式不是文本格式的,我不知道BAT行不行,只会用VBSCRIPT修改。
为了满足更大的灵活性,路径的修改采用的正则表达式,可以满足更多的需求。

比如从  D:\应用软件\cad2004\acad.exe   到    E:\应用\cad2004\复件 acad.exe

OldPathFormat = "^(D\:\\应用软件\\)(.*\\)([^\\]*)$"
NewPathFormat = "E:\应用\$2\复件 $3"

下面是针对你需求的代码。
' 要处理的文件夹,如果是 "" 则代表当前文件夹。
Folder = ""

' 替换之前和之后的路径格式,这里采用正则表达式,可适应各种复杂的变换方式。
' 本程序只会修改符合指向路径格式符合 OldPathFormat 的快捷方式。
OldPathFormat = "^(D\:\\应用软件\\)(.*)$"
NewPathFormat = "E:\应用\$2"


Set objFSO = CreateObject("Scripting.FileSystemObject")
If Folder = "" Then Folder = objFSO.GetFile(WScript.ScriptFullName).ParentFolder
ChangeFilesUnderTheFolder Folder



' 处理文件夹下(不含子文件夹)所有的 .lnk 快捷方式文件
Function ChangeFilesUnderTheFolder(TheFolder)
        With objFSO.GetFolder(TheFolder)
                For Each Subfile in .Files
                        If LCase(Right(Subfile.Name, 4)) = ".lnk" Then
                                ChangeShortcutTargetPath(Subfile.Path)
                        End If
                Next
        End With
        MsgBox "文件夹 “" & TheFolder & "” 下所有快捷方式文件(除了提示不能修改的)已处理完毕!", 4160, "完成"
End Function


' 修改快捷方式文件的指向
Function ChangeShortcutTargetPath(ShortcutFile)
        On Error Resume Next
        With CreateObject("WScript.Shell").CreateShortCut(ShortcutFile)
                .TargetPath = ConvertTargetPath(.TargetPath, OldPathFormat, NewPathFormat)
                .Save               
        End With
        If Err.Number<>0 Then
                MsgBox "不能修改 “" & ShortcutFile & "” 的指向!", 4112, "错误"
                Err.Number = 0
        End If
End Function


' 将旧的路径替换成新的路径(如果不符合定义的格式则不替换)
Function ConvertTargetPath(OldTargetPath, OldPattern, NewPattern)
        Dim tempStr
        Set regEx = New RegExp
        regEx.Pattern = OldPattern
        If regEx.Test(OldTargetPath) Then
                tempStr = regEx.Replace(OldTargetPath, NewPattern)
        Else
                tempStr = OldTargetPath
        End If
ConvertTargetPath = tempStr
End Function


附件 1: ChangeShortcutTargetPath.zip (2009-10-17 20:50, 1019 bytes,下载次数: 25)
2009-10-17 20:50
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
UncleBill
新手上路





积分 12
发帖 10
注册 2009-10-4
来自 海南
状态 离线
『第 3 楼』:  

start d:\d\d.exe
呵呵!用这个代替快捷方式多好

2009-10-17 22:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: