Board logo

标题: vbs 更改快捷方式的目标路径后,如何不改变图标? [打印本页]

作者: 25869     时间: 2009-8-7 00:45    标题: 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

作者: slore     时间: 2009-8-7 01:31
既然知道问题。。。
为什么不调试下。。。

msgbox old
你就知道为什么了。


还有
b=a
a=b

这样做有意义麽?
作者: 25869     时间: 2009-8-7 02:16
多谢指教, 我试过 wscript.echo old 得到 ",0"

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

old=oShLnk.IconLocation
       oShLnk.IconLocation=old
作者: slore     时间: 2009-8-7 02:46
你没看明白麽?

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

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


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

显示的图标由目标决定。

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

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

但是为了通用你最好判断下。
oShLnk.IconLocation是不是只有图标索引,就是第一个字符是不是","
如果不是就不用变。
作者: 25869     时间: 2009-8-7 09:17
图标的索引指向规则不太熟悉

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