中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » vbs 更改快捷方式的目标路径后,如何不改变图标?
作者:
标题: vbs 更改快捷方式的目标路径后,如何不改变图标? 上一主题 | 下一主题
25869
新手上路





积分 10
发帖 10
注册 2009-8-1
状态 离线
『楼 主』:  vbs 更改快捷方式的目标路径后,如何不改变图标?

网上找到的改变快捷方式的目标路径,可更改后,图标也变了,请问如何解决?
Sub Doit(strlnk)
Dim oShlnk
   Set oShlnk = Wsh.CreateShortcut(strlnk)
If Instr(oShLnk.TargetPath,oldpath) > 0 Then
       old=oShLnk.IconLocation
       oShLnk.IconLocation=old '添加后无效


       oShLnk.TargetPath = Replace(oShLnk.TargetPath,oldpath,newpath)
       oShLnk.WorkingDirectory = Replace(oShLnk.WorkingDirectory,oldpath,newpath)
       oShLnk.Save
       ji_2 = ji_2 + 1
End If
   Set oShLnk=NoThing
End Sub


---------------------------------------------
oldpath = "这里填写原路径中将被替换的内容"
newpath = "这里填写新路径中要使用的内容"

Dim Wsh,fso
Set Wsh = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Dim ji_1,ji_2,Folder
ji_1 = 0
ji_2 = 0
Folder = Wsh.CurrentDirectory
if Ask("将要修改"&chr(34)& Folder &chr(34)&"里的所有快捷方,是否继续") then
   Dim f,fc,f1,ext
   Set f = fso.GetFolder(Folder)
   Set fc = f.Files
   For Each f1 in fc
      ext = LCase(fso.GetExtensionName(f1))
      if ext = "lnk" then
         ji_1 = ji_1 + 1
         call Doit(f1)
      end if
   Next
end if

Set WSH = Nothing
msgbox "找到 "&ji_1&" 个快捷方式"&vbCrLf&"修改 "&ji_2&" 个快捷方式",64,"执行完毕!"
WScript.quit

Sub Doit(strlnk)
Dim oShlnk
   Set oShlnk = Wsh.CreateShortcut(strlnk)
If Instr(oShLnk.TargetPath,oldpath) > 0 Then
       oShLnk.TargetPath = Replace(oShLnk.TargetPath,oldpath,newpath)
       oShLnk.WorkingDirectory = Replace(oShLnk.WorkingDirectory,oldpath,newpath)
       oShLnk.Save
       ji_2 = ji_2 + 1
End If
   Set oShLnk=NoThing
End Sub


2009-8-7 00:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

既然知道问题。。。
为什么不调试下。。。

msgbox old
你就知道为什么了。


还有
b=a
a=b

这样做有意义麽?



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-8-7 01:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
25869
新手上路





积分 10
发帖 10
注册 2009-8-1
状态 离线
『第 3 楼』:  

多谢指教, 我试过 wscript.echo old 得到 ",0"

我的意思是用原来的快捷方式图标, 测试后无效, 所以才发帖请教的.

old=oShLnk.IconLocation
       oShLnk.IconLocation=old

2009-8-7 02:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

你没看明白麽?

如果只有图标的索引指向的目标程序的。

这个地方
你倒来倒去没发现没做什么事麽?
b=a
a=b


如果原来指向A.exe
图标,0
你改变为B.exe
图标,0没有变。。。

显示的图标由目标决定。

如果是自定义的图标就会显示全路径
X:\XXX\XXX.EXE,2

你图标设置
oShLnk.IconLocation=oShLnk.TargetPath & oShLnk.IconLocation

但是为了通用你最好判断下。
oShLnk.IconLocation是不是只有图标索引,就是第一个字符是不是","
如果不是就不用变。

   此帖被 +1 点积分    点击查看详情   
评分人:【 25869 分数: +1  时间:2009-8-7 09:18




S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-8-7 02:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
25869
新手上路





积分 10
发帖 10
注册 2009-8-1
状态 离线
『第 5 楼』:  

图标的索引指向规则不太熟悉

加上就可以了
if left(oShLnk.IconLocation,1)="," then oShLnk.IconLocation=oShLnk.TargetPath & oShLnk.IconLocation

2009-8-7 09:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: