修复VBS脚本运行当前目录快捷方式错误并实现目录适配
修复VBS脚本运行当前目录所有快捷方式的错误
问题根源
- 路径空格解析错误:原代码中
WshShell.Run objFile.Path未对路径加双引号包裹,当快捷方式所在路径包含空格时,Windows会将空格后的内容识别为独立参数,导致运行失败。 - 目录定位不准确:用
FSO.GetAbsolutePathName(".")获取目录存在隐患——如果从非脚本所在目录的命令行启动脚本,"."会指向命令行的工作目录,而非脚本实际位置,无法满足"复制到其他文件夹也能正常工作"的需求。
修正后的完整代码
Dim FSO, WshShell, objFolder, objFile, scriptDir Set WshShell = WScript.CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") ' 获取脚本所在的绝对目录,确保复制到任意文件夹都能正确识别目标目录 scriptDir = FSO.GetParentFolderName(WScript.ScriptFullName) Set objFolder = FSO.GetFolder(scriptDir) For Each objFile in objFolder.Files ' 匹配.lnk后缀(不区分大小写) If LCase(FSO.GetExtensionName(objFile.Name)) = "lnk" Then ' 用双引号包裹路径,避免空格导致的解析错误 WshShell.Run Chr(34) & objFile.Path & Chr(34) End If Next ' 释放对象,避免内存占用 Set objFile = Nothing Set objFolder = Nothing Set FSO = Nothing Set WshShell = Nothing
关键改动说明
- 精准定位脚本目录:
WScript.ScriptFullName是脚本自身的完整路径,通过FSO.GetParentFolderName获取其父目录,无论从何种方式启动脚本,都能准确指向脚本所在文件夹。 - 兼容带空格的路径:用
Chr(34)生成双引号包裹路径,确保Windows将整个路径识别为单个参数。 - 更可靠的后缀判断:
FSO.GetExtensionName直接提取文件扩展名,避免了原代码中Right(objFile.Path,4)在文件名长度不足4位时的逻辑错误。
内容的提问来源于stack exchange,提问作者Legomanfr
相关产品推荐
相关产品推荐

