You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复VBS脚本运行当前目录快捷方式错误并实现目录适配

修复VBS脚本运行当前目录所有快捷方式的错误

问题根源

  1. 路径空格解析错误:原代码中WshShell.Run objFile.Path未对路径加双引号包裹,当快捷方式所在路径包含空格时,Windows会将空格后的内容识别为独立参数,导致运行失败。
  2. 目录定位不准确:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:40:19