中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 06:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » vbs 更改快捷方式的目标路径后,如何不改变图标? 查看 827 回复 4
楼 主 vbs 更改快捷方式的目标路径后,如何不改变图标? 发表于 2009-08-07 00:45 ·  中国 北京 联通
新手上路
积分 10
发帖 10
注册 2009-08-01 00:34
17年会员
UID 149680
性别 女
状态 离线
网上找到的改变快捷方式的目标路径,可更改后,图标也变了,请问如何解决?
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
2 发表于 2009-08-07 01:31 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
既然知道问题。。。
为什么不调试下。。。

msgbox old
你就知道为什么了。


还有
b=a
a=b

这样做有意义麽?
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
3 发表于 2009-08-07 02:16 ·  中国 北京 联通
新手上路
积分 10
发帖 10
注册 2009-08-01 00:34
17年会员
UID 149680
性别 女
状态 离线
多谢指教, 我试过 wscript.echo old 得到 ",0"

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

old=oShLnk.IconLocation
oShLnk.IconLocation=old
4 发表于 2009-08-07 02:46 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
你没看明白麽?

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

这个地方
你倒来倒去没发现没做什么事麽?
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-08-07 09:18
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
5 发表于 2009-08-07 09:17 ·  中国 北京 联通
新手上路
积分 10
发帖 10
注册 2009-08-01 00:34
17年会员
UID 149680
性别 女
状态 离线
图标的索引指向规则不太熟悉

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