Board logo

标题: [已完结]帮我修正一下快捷方式打开所在位置的VBS代码 [打印本页]

作者: kidzgy     时间: 2009-7-29 05:32    标题: [已完结]帮我修正一下快捷方式打开所在位置的VBS代码

set args = WScript.Arguments
linkname = args(0)
set wshshell = CreateObject("WScript.Shell")
set scut = wshshell.CreateShortcut(linkname)
set fs = CreateObject("Scripting.FileSystemObject")
folder = """" & fs.GetParentFolderName(scut.TargetPath) & """"
wshshell.Run(folder)

这一段是VBS代码。里面有个BUG。附件是安装卸载的BAT.其中包括了VBS代码。

这是一个给快捷方式添加右键【打开所在位置】的程序,功能是右键点击以后打开快捷方式的相应目录。

功能类似于右键属性-查找目标,但是不同的是可以不用查看属性,而且查找目标是选定目标,而打开所在位置是直接打开快捷方式的对应文件夹没有选定目标。



我提出来的问题是,这个VBS运行起来有个BUG,其实这个VBS在网上广为流传,无意中发现便希望兄弟们解决一下问题修复下BUG,完善程序。

例如说:我在桌面上有个maxthon的快捷方式,对应程序是E:\Maxthon\Maxthon.exe
如果同时拥有程序E:\Maxthon.exe (即在E盘存在文件maxthon.exe)

那么在maxthon右键打开所在位置的时候,是在运行E:\Maxthon.exe,当然了,如果没有E:\Maxthon.exe是能实现功能的,这就是BUG。


希望各位能修复一下,就算存在文件E:\Maxthon.exe也能照常进入到快捷方式的对应文件夹。


Last edited by kidzgy on 2009-8-7 at 08:56 ]
附件 1: 打开所在位置插件.rar (2009-7-29 05:32, 1.25 KiB,下载次数: 11)

作者: tireless     时间: 2009-7-29 12:29
另一个代码:
(出处: http://bbs.360safe.com/viewthread.php?tid=99058&page=1#pid352070
dim ws,objArgs,strPath
Set objArgs = WScript.Arguments
if objArgs.Count>0 then
strPath=mid(objArgs(0),instr(objArgs(0),"/")+1,len(objArgs(0))-instr(objArgs(0),"/"))
end if
set ws=CreateObject("Wscript.Shell")
ws.run "Explorer /select, " & GetTargetPath(strPath)

Function GetTargetPath(LinkName)
On Error Resume Next
Dim Shortcut
Set Shortcut = CreateObject("Wscript.Shell").CreateShortcut(LinkName)
GetTargetPath = Shortcut.TargetPath
Shortcut.Save
Set Shortcut = Nothing
End Function

作者: kidzgy     时间: 2009-7-29 20:36
非常感谢你的代码,你那功能就完全等于查找目标的了。

而我需要的是,打开快捷方式所在路径,而不选择目标,就是好像鼠标单击了一下那样。查找目标是有的,我想要的是没有的,并且最好能最大化窗口。

作者: slore     时间: 2009-7-31 07:11
汗~

结合下。。。

wshshell.Run(folder)
改为
wshshell.Run("explorer " & folder)

作者: kidzgy     时间: 2009-7-31 08:55
哇,不会吧,就这么简单了。

太感谢啦。那新的代码就是

set args = WScript.Arguments
linkname = args(0)
set wshshell = CreateObject("WScript.Shell")
set scut = wshshell.CreateShortcut(linkname)
set fs = CreateObject("Scripting.FileSystemObject")
folder = """" & fs.GetParentFolderName(scut.TargetPath) & """"
wshshell.Run("explorer " & folder)

作者: slore     时间: 2009-7-31 09:09
不知道不选中有啥好处。。。

作者: kidzgy     时间: 2009-8-1 07:58
是这样的,如果文件夹文件非常多,选中的话,就会到那个文件,可是滚动轴却不在最上端。

如果不选中,就好像双击文件夹刚进入一样,更加快速浏览了。

作者: kidzgy     时间: 2009-8-4 08:39
对了,又有新问题出现了,当快捷方式属性【目标】【起始位置】开头和末尾有" 双引号的时候,就没法打开所在位置了。

这样的话又该怎么样解决呢

作者: slore     时间: 2009-8-4 09:37
folder = """" & fs.GetParentFolderName(scut.TargetPath) & """"

因为你又加了一次……

先判断本身有引号没。。。
没有再加

作者: kidzgy     时间: 2009-8-4 21:15
用5楼修改好的代码就弹出这样的提示。
那该怎么样改呢?




Last edited by kidzgy on 2009-8-6 at 08:18 ]

作者: kidzgy     时间: 2009-8-4 21:16
我试着按你所说,首末都减去一个双引号,或是2个,都没有效果,还是这样的提示

作者: slore     时间: 2009-8-5 01:39
wshshell.Run(folder)

msgbox folder你就知道你改的有问题了

作者: kidzgy     时间: 2009-8-5 05:46
我增补了msgbox folder后,对着没有双引号的运行,就弹出首末有双引号。

可是,对着有首末双引号的运行,还是10楼的提示,原因是不是以lnk或url末尾结尾的。

由此可见,问题是,怎么使VBS支持有双引号的快捷方式。




Last edited by kidzgy on 2009-8-6 at 08:20 ]

作者: slore     时间: 2009-8-5 07:45
有引号的就不要再加引号了……

作者: kidzgy     时间: 2009-8-5 08:19
麻烦你按照5楼的代码,修正一下,贴个完整的好吗?因为我是新手,如果你贴出个修正好的完全代码,我仔细比对一下,或许我更能理解哪里出了问题,这样我也会成长得更快吧

作者: slore     时间: 2009-8-5 13:21
Set args = WScript.Arguments
linkname = args(0)
Set wshshell = CreateObject("WScript.Shell")
Set scut = wshshell.CreateShortcut(linkname)
Set fs = CreateObject("Scripting.FileSystemObject")
folder = fs.GetParentFolderName(scut.TargetPath)
If Left(folder,1) <> """" Then folder = """" & fs.GetParentFolderName(scut.TargetPath) & """"
wshshell.Run("explorer " & folder)

作者: kidzgy     时间: 2009-8-5 21:25

还是这样,我想第4行出了问题吧,应该就在那里作判断有无双引号

这是我快捷方式的图


Last edited by kidzgy on 2009-8-6 at 08:27 ]

作者: kidzgy     时间: 2009-8-6 22:52
http://upload.cn-dos.net/img/1638.zip
这是个迅雷的快捷方式,你试试看吧。

作者: slore     时间: 2009-8-7 00:41
正常。。。

作者: kidzgy     时间: 2009-8-7 07:45
那就是没有办法解决了,那这个程序就只能对于没有双引号的路径使用?

作者: slore     时间: 2009-8-7 08:06
我这里有没有都正常运行。。

作者: kidzgy     时间: 2009-8-7 08:15
那就太奇怪了,到底会是什么问题呢?有空我得到网吧试试

作者: kidzgy     时间: 2009-8-7 08:44




我明白了。

我的迅雷快捷方式的类型跟网络连接里创建宽带连接的快捷方式的实质是一样的。

而我打包成ZIP,再解压的时候,就形成了主程序右键发送到桌面的快捷方式一样。

例如图,我用新建RAR,打开看桌面,只看到迅雷快捷方式lnk的图标,而宽带连接和另一个迅雷却看不到,这里也由此说明另一个迅雷和宽带连接的快捷方式的实质是一样的,但是不同于发送到桌面的快捷方式。因此才会产生这样的错误。

其实,就算双引号引着,也没有必要修改了,因为原来5楼修复好的,已经能够用了。

作者: kidzgy     时间: 2009-8-7 08:47
像弹出17楼的提示,是因为我对右键的不是以lnk为末尾文件名的快捷方式,而是系统注册表形成的另一种快捷方式。

作者: slore     时间: 2009-8-7 12:42
你看不到不是这个原因。。。是因为他们不在这个目录。。。

桌面是
all users 和 你自己的桌面显示在一起的……

你从常规属性应该能看到了

作者: kidzgy     时间: 2009-8-7 22:16
原来如此啊。。